一个关于接口的很傻的问题

[复制链接]
查看11 | 回复8 | 2006-9-26 17:30:03 | 显示全部楼层 |阅读模式
public interface I {

public void aaa();
}
接口I定义了一个方法aaa();
类A实现这个接口,并且增加了自己的一个方法
public class A implements I
{

public void aaa()

{

System.out.println("this is aaa&quot

;

}

public void bbb()

{

System.out.println("this is bbb&quot

;

}
}
客户断调用
public static void main(String[] args) {

I a = new A();

a.aaa();//没问题
a.bbb();//编译失败
}
如果想要用bbb方法,只能写成
((A)a).bbb();
那么,在这里,我们为什么要使用接口呢
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
a.bbb();这里是不能用接口的哦,接口不是为这个来设计的,它是为了将不同类型的对象的相同功能归纳在一起而创造的
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
是啊,我的疑惑就是如果定义了一个接口的话,那么,他的实现就只能局限于接口中定义的方法,而不能有自己的方法;
如果需要有自己扩充的方法,那就只能做成继承
感觉受了很大的限制
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
不是你理解的这样的
你完全可以用对象的引用来做啊
A a = new A();
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
这样就不是 针对接口编程 了么?
不是要 依赖抽象,不要依赖具体么?
不过也是,我们一般都是 hashtable table = new Hashtable()
而不是 Map table = new Hashtable()
再想想...
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
……………………
你并没有理解使用这个东西的意义,和针对接口编程的意义,建议恶补一下
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
汗!的确如此
因为是半路出家,所以很多基础的东西并没有很深的理解
知其然不知其所以然,换了个角度或者问题就迷糊了
所以现在正在从头恶补

还请多多指教,呵呵
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
又想了想,在Java中,接口的作用
1、解决Java中单继承的问题;
2、将不同对象的相同功能抽取出来;
其实第二点,通过抽象类也可以完成,但是由于Java的单根继承的特点,就只能通过接口来解决,否则超类就成了上帝类了。
而从某种意义上来说,实现接口的具体类,就应当只实现接口定义的方法,而不应该扩充出其他的方法;如果一定要扩充
1、扩充接口的方法
2、如果这个方法是具体类特定的方法,那么可以将此方法定义在另外的接口,然后来实现
3、如果不想再增加接口,就使用具体类本身,象4楼的做法
而针对接口编程,是否应该这样理解:
在方法返回值、参数传递类型时候,尽量使用接口而不是具体类
那么,就要求我们的代码尽量使用上面的第1和2两种方法,而不是3
不知道是否正确,请大家指正
回复

使用道具 举报

千问 | 2006-9-26 17:30:03 | 显示全部楼层
其实在程序设计方面的话,楼上的做法会把一个简单的问题复杂化,这种问题的解决办法是有个模式是compise,可以比较简单的实现。在实际中,多接口的implements是要避免的,否则会造成理解的困难。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行