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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘晓康 中级黑马   /  2012-4-4 15:41  /  1743 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假如一个类实现两个接口,这两个接口中有一个同样的方法,会不会有冲突啊,怎么去实现?
假如Test类继承了一个类同时要实现一个接口,假如Test的父类中有一个叫public void fun(){}的方法,而接口中也有一个public void fun();的方法,那么Test里面重写:public void fun(){}方法,这是覆盖了父类的方法呢?还是实现了接口的方法?还是一举两得?

6 个回复

倒序浏览
多个接口具有相同的方法,调用的是任意一个接口的方法,因为他们本来就一样,不管多少个接口,方法都要实现,接口的方法都是一样的,那实现的代码也就是子类的方法。
如果超类和接口具有相同的方法,则调用的是接口的。因为接口的方法必须在该类中实现,实现后相当于子类覆盖了超类的方法。
回复 使用道具 举报
抽象类中的方法只有子类继承才能实现,它自身并没有方法去实现,所以一个类实现两个接口没有冲突;test 里的public void fun(){}方法既覆盖了父类方法也实现了接口的方法。
回复 使用道具 举报
子类继承了父类的 非私有的run 方法,不管你是否有过覆写动作,在子类中都继承过来并存在这个run 方法。所以你再去实现一个接口,接口中的方法都是抽象的, 就算你 子类中没有 写明那个 run方法,因为存在,所以 那个run 方法也是覆写了接口中run 。并没有冲突。
有了run 方法就可以对父类和接口进行扩展。试想,难道还能两个 一模一样的 run ?
回复 使用道具 举报
本帖最后由 孙利川 于 2012-4-4 17:38 编辑

接口只看方法,只要类定义时声明了实现接口,并且在类中实现了接口的所有方法,那么我们就认为该类实现了某接口。
为实现接口而写的方法当然也是类中的一个成员,如果父类中也有相同的方法,那么它自然也就覆盖了父类的方法。
所以答案是一举两得。
回复 使用道具 举报
在JAVA中是可以多实现的,不会有冲突的,因为只有方法名,没有方法体,复写了就可以了。复写一次相当于两个接口都被复写了。
第二个问题,既然父类中都有一个public void fun(){},你干嘛还要把接口中的public void fun();复写成public void fun(){},这不是多止一举吗?如果你两个都写成这个样子,既复写父类中的,也实现了接口中的。我执行过。你可以试试。不过多止一举,发现了这个问题,你很牛。
回复 使用道具 举报
其实,老毕的视频说的很详细。
不管你的父类,还是接口中有多少个相同的方法,注意是相同的,即返回值,函数名,参数列表均相同的方法。
你在子类中实现或者说复写了这个方法,就等于实现上了所有的接口,同时复写了父类的方法。
java支持多继承,但只有接口可以多继承,这是因为接口没有方法体,你继承多少个相同函数,对于那个接口而言还是同一个没有方法体的函数。
但是类就不能多继承,如果可以的话,不同父类中有相同方法,而这些方法的功能不同,即方法体的内容不同。当你继承过来后,在调用时就不知道该调用哪一个。
但是有一种情况是不可以多实现的。比如一个接口中有一个方法: void show(); 另一个接口中还有一个方法: int show(); 这时就不能同时实现这个两个接口。理由很简单,就算一个类可以同时实现这两个接口,但当你创建对象调用show方法时,改返回哪一种类型的返回值? 这与重载正好相反,重载不关心返回值类型,只关心参数列表。
可能以上你都知道了,但也当做是自己对之前学习的理解吧。别嫌我话多。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马