质疑接口的做法,为什么方法一定要全部实现,才能实现接口?? 尤其是mouseListener接口好多方法很多时候不是这些方法都要用到.虽然说可以用mouseAdapter但,既然不用还有什么存在的价值!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵 可mouseAdapter就是实现了mouseListener接口你的论断不成立了 interface A{ void name();void display();}class B implements A{public void name(){} }class C{ .................main(),,,{ A a=new B(); a.display();//想想这里将会出现什么就明白了 }} interface A{ void name();void display();}class B implements A{public void name(){}}class C{ .................main(),,,{ A a=new B(); a.display();//想想这里将会出现什么就明白了 }}类B为何没有实现display()方法?这时的a.display()什么都显示不了。 这个能通过编译吗? 没有实现display方法啊 楼主的考虑非常好! 比那些固守陈规的思想要好, 了解一下Duck Typing了.Java这辈子算是完了... ... 我个人的理解是接口更像一个标准,它规定某对象应该有哪些方法,你可能用到这几个,我可能用到另外几个。JDK为我们提供了一个默认实现类,是为了让我们更多地去关注我们要用到的方法。 恩,我也觉得太烦了。也许可以这样想:你买一台品牌机,你不能只要它的CPU或者显卡,你要买他的全套。而接口的话,也是个品牌机,你光买(实现)我的一个CPU不行,你还要买我的别的这个一套里东西。 接口要考虑通用性.如果把一个MouseListener的内容分成几个接口来写,你每次需要处理不同的时间时就实现不同的接口,带来的问题更大. 首先,“接口中定义的方法必需全部实现,不能留空”,这个是 Java 语言定义的,这样定义有它的好处。但这只是 Java 设计者的一个选择而已,并不是“一定如此”,比如 COM(ActiveX)就可以在实现一个 Interface 的时候把某个方法实现成 NOT_IMPLEMENTED。但既然 Java 已经设计成这样了,你写程序时就必须遵守 :)再说 mouseListener,它是在一个 Interface 里定义了各种事件方法。其实如果由你来重新设计这个东西的话,可以有两个选择,一个是设计成现在这个样子,一个是为每个鼠标事件定义一个单独的 Interface。稍微想一想就可以知道,这两种设计是各有利弊的。但可能更多的人会倾向于现在 mouseListener 的设计,因为毕竟可以通过 mouseAdapter 来弥补“不是这些方法都要用到”时的不便;而如果设计成另一个极端的话,当需要同时响应多个鼠标事件的时候,就没有什么好的设计模式能帮到你了,势必会产生过多的 class。最后,“既然不用还有什么存在的价值”,这个不能这么说。所谓“不用”,只是你这一次只用到了某个事件方法;等下一次,你在另一个场合下要处理鼠标事件的时候,可能就需要同时响应多个事件了。mouseListener 这个 Interface 的设计要考虑到不同的应用场景。 你即使要实现某一个接口肯定你是想用它的某个或某些方法.至于其它的方法你现在的功能要求上虽然用不着,但SUN还是把一些相关的方法提供出来,你可以不用即不重写它的方法体.它提供的那么多方法不是必须全用的,是要根据不用的要求来实现的.它只是提供了一些常用的相关的方法,还有些针对你现在的需求没有的方法你得自己写.SUN这样作还可以提醒你我还有某某方法等. 接口是标准.就像法律:难道不杀人,只打劫就不犯法了?mouseAdapter 新手就是对java-api不熟悉,有空多查API去吧 接口可以实现Java不能多重继承的好东西 觉得还是不错的 怎么让panel中的高度不同的组件,底部对齐排列? SimpleDateFormat 的运用问题! 求助.java初始化问题 异常的使用 如何调整Applet尺寸? 学编程千万不要参加培训,所有收费的培训都骗钱的 java中静态变量的用法 关于JTree的一个问题 jbuilder6的问题 帮我看看这道scjp题 一个有趣的问题 关于“向上类型转换”
你的论断不成立了
class B implements A{
public void name(){}
}class C{
.................main(),,,{
A a=new B();
a.display();//想想这里将会出现什么就明白了
}
}
interface A{ void name();void display();}
class B implements A{
public void name(){}
}class C{
.................main(),,,{
A a=new B();
a.display();//想想这里将会出现什么就明白了
}
}
类B为何没有实现display()方法?这时的a.display()什么都显示不了。
Java这辈子算是完了... ...
如果把一个MouseListener的内容分成几个接口来写,你每次需要处理不同的时间时就实现不同的接口,带来的问题更大.
觉得还是不错的