A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何创 中级黑马   /  2012-10-28 23:32  /  2211 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1黑马币 +12 收起 理由
谭立文 + 12

查看全部评分

9 个回复

倒序浏览
要实现一个接口必须要覆写接口里面的所有方法,因为接口里面的方法都是抽象的。

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

如果一个接口有7个方法,你只打算实现其中一种,那就再找其他接口吧,这个接口肯定不是你需要的。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
像这样需要验证的问题,建议自己动手写代码来验证,这样才能知道到底为什么。
比如说,定义个接口
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
邢晏玮 来自手机 中级黑马 2012-10-29 00:21:09
板凳
接口是一个特殊的抽象类,如果你要用到一个抽象类中的抽象方法就得覆写这个方法,接口中的所有方法都是抽象方法,所以你就的全部覆写这些方法,如果你要一定想用到这个接口中的某个方法,而其他方法不用,你在覆写的时候就方法体就定义空就可以了!

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
邢晏玮 来自手机 中级黑马 2012-10-29 00:21:44
报纸
接口是一个特殊的抽象类,如果你要用到一个抽象类中的抽象方法就得覆写这个方法,接口中的所有方法都是抽象方法,所以你就的全部覆写这些方法,如果你要一定想用到这个接口中的某个方法,而其他方法不用,你在覆写的时候就方法体就定义空就可以了!
回复 使用道具 举报
梁枝武 来自手机 高级黑马 2012-10-29 00:48:11
地板
对,都得复写才能实例化,如果你只想用其中的一个方法,那么像楼上所说的,将其他不用的方法的方法体定义为空。
回复 使用道具 举报
“看毕老师视频,听到他说的一句话,我不明白,请各位大侠帮忙分析一下
毕老师说:接口类型的参数 如果该接口里面有七个方法,必须覆写这七个方法才能实例化这个对象。
我不明白,是一定吗??我如果要其中一个方法,怎么办,如果可以希望代码解释,最好能详细分析分析。”

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

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

但是,如果这个接口是自己写的话,要么你也写一个适配器,要么你就只能把这些抽象方法全部复写了

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果实现接口的类中没有实现接口中的全部方法,必须将此类定义为抽象类。
回复 使用道具 举报
在.NET中使用接口可以实现类的多继承
接口类似抽象类,与抽象类不同于接口是完全抽象的
在类继承的时候,选择使用接口时,必须实例化接口的所有方法
而楼主所提的问题不必担心
因为接口往往是个小块
不会含有太多方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马