黑马程序员技术交流社区

标题: 请教一个问题,新手初学。 [打印本页]

作者: 何创    时间: 2012-10-28 23:32
标题: 请教一个问题,新手初学。
看毕老师视频,听到他说的一句话,我不明白,请各位大侠帮忙分析一下
毕老师说:接口类型的参数 如果该接口里面有七个方法,必须覆写这七个方法才能实例化这个对象。
我不明白,是一定吗??我如果要其中一个方法,怎么办,如果可以希望代码解释,最好能详细分析分析。
作者: 马磊    时间: 2012-10-29 00:02
要实现一个接口必须要覆写接口里面的所有方法,因为接口里面的方法都是抽象的。

在设计上来说,要实例化接口的对象必须覆写其所有方法,让这个对象具有接口一样的功能,这样才符合要求。
拿主板,声卡,网卡来说,主板上有PCI接口,PCI接口有两个方法:启动,关闭。如果声卡和网卡不能实现启动和关闭中任一个方法,那它们插在这个接口中就不能正常工作,相当于它们没有实现这个接口。

如果一个接口有7个方法,你只打算实现其中一种,那就再找其他接口吧,这个接口肯定不是你需要的。
作者: 王永荣    时间: 2012-10-29 00:06
像这样需要验证的问题,建议自己动手写代码来验证,这样才能知道到底为什么。
比如说,定义个接口
  1. <div class="blockcode"><blockquote>interface inter{
  2.         void a();
  3.         void b();
  4.         void c();
  5. }
复制代码
再定义个类来实现它,学会用注释的方法来验证
  1. class A implements inter{
  2.         public void a(){}
  3.         public void b(){}
  4.        // public void c(){} //注释掉一个方法,你会发现控制台报错: A不是抽象的, 并且未覆盖inter中的抽象方法c()。
  5. }
复制代码

作者: 邢晏玮    时间: 2012-10-29 00:21
接口是一个特殊的抽象类,如果你要用到一个抽象类中的抽象方法就得覆写这个方法,接口中的所有方法都是抽象方法,所以你就的全部覆写这些方法,如果你要一定想用到这个接口中的某个方法,而其他方法不用,你在覆写的时候就方法体就定义空就可以了!
作者: 邢晏玮    时间: 2012-10-29 00:21
接口是一个特殊的抽象类,如果你要用到一个抽象类中的抽象方法就得覆写这个方法,接口中的所有方法都是抽象方法,所以你就的全部覆写这些方法,如果你要一定想用到这个接口中的某个方法,而其他方法不用,你在覆写的时候就方法体就定义空就可以了!
作者: 梁枝武    时间: 2012-10-29 00:48
对,都得复写才能实例化,如果你只想用其中的一个方法,那么像楼上所说的,将其他不用的方法的方法体定义为空。

作者: 张其辉    时间: 2012-10-29 01:08
“看毕老师视频,听到他说的一句话,我不明白,请各位大侠帮忙分析一下
毕老师说:接口类型的参数 如果该接口里面有七个方法,必须覆写这七个方法才能实例化这个对象。
我不明白,是一定吗??我如果要其中一个方法,怎么办,如果可以希望代码解释,最好能详细分析分析。”

不用覆盖七个方法,我具体忘了是那个类中的方法了,你再好好看看,毕老师讲了,有一个子类实现了这个接口,并覆写了里面的七个方法,但是覆写后的方法体为空,你可以添加你自己的内容,你要用那个方法就调用哪个就OK了。
作者: 徐升兴    时间: 2012-10-29 02:59
本帖最后由 徐升兴 于 2012-10-29 03:01 编辑

楼上说的是GUI里面监听机制那点的,楼主说的是如果有一个接口,有七个抽象方法,从java的规则上来说,这个必须复写,否则无法实例化
但是如果这个接口是java提供的接口话,一般情况下如果大于三个抽象方法方法,那么java会提供一个适配器,这个适配器会把那些抽象方法都实现了
你需要哪个方法,就继承这个适配器,然后复写你所需要的方法就OK

但是,如果这个接口是自己写的话,要么你也写一个适配器,要么你就只能把这些抽象方法全部复写了
作者: 丁桂松    时间: 2012-10-29 10:55
如果实现接口的类中没有实现接口中的全部方法,必须将此类定义为抽象类。

作者: 高腾    时间: 2013-6-13 18:54
在.NET中使用接口可以实现类的多继承
接口类似抽象类,与抽象类不同于接口是完全抽象的
在类继承的时候,选择使用接口时,必须实例化接口的所有方法
而楼主所提的问题不必担心
因为接口往往是个小块
不会含有太多方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2