继承与接口问题

wozuiaijiahui 2012-08-29 09:35:04

interface I1 {
int f1();
}
class C {
public int f1() {
return 1;
}
}
class X extends C implements I1 {
public int f1() {
return 1;
}
}

X继承了C并且实现了I1接口,C和I1有相同名字的方法,我想问下,X里的方法是继承C的还是实现I1的?
...全文
223 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wozuiaijiahui 2012-08-31
  • 打赏
  • 举报
回复
其实我也觉得能用它就可以了,看书上的这段代码很是不理解,所以就过来问问了。
NewMoons 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

额,能再问个问题吗,是不是只有接口和父类的方法相同,实现接口可以不用实现接口的方法?就像X类里什么方法都不写,依然是对的。
[/Quote]
自己试试不就知道了,唉。。。。。。。
NewMoons 2012-08-30
  • 打赏
  • 举报
回复
接口的方法本身就必须要实现,【继承C的还是实现I1】两者又不矛盾,只是刚好巧合在一起了,你纠结个啥啊。
就好像一个人上了大学,叫他大学生可以吧。然后他姓大,名叫大学生,难道不行吗?
楼主,当心被人耻笑智商啊,呵呵。
结贴是美德 2012-08-30
  • 打赏
  • 举报
回复
为何要强调是“巧合”???? 难道有意为之不更合理么?

一个接口只要求实现它规定的方法就行了,你管她是继承来的,还是自身定义的。

子类本身没有必要重写父类的方法时非要重复实现一遍不是很难受的事情么。。。
wozuiaijiahui 2012-08-30
  • 打赏
  • 举报
回复
额,能再问个问题吗,是不是只有接口和父类的方法相同,实现接口可以不用实现接口的方法?就像X类里什么方法都不写,依然是对的。
wozuiaijiahui 2012-08-30
  • 打赏
  • 举报
回复
大致明白了,多谢大家
NewMoons 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
这个我确实试了,没有实现接口的方法,代码没有报错,但是只有这种情况下才可以不实现接口的方法吗?没有别的情况了吗?
[/Quote]
兄弟我觉得你有些走火入魔了,静下心看看接口的真正作用什么?sun为什么要创建接口这种东西。而不是纠结一些旁枝细末。
wozuiaijiahui 2012-08-30
  • 打赏
  • 举报
回复
这个我确实试了,没有实现接口的方法,代码没有报错,但是只有这种情况下才可以不实现接口的方法吗?没有别的情况了吗?
NEUandUSTBneo 2012-08-30
  • 打赏
  • 举报
回复
两个都做到了。
愤豆 2012-08-30
  • 打赏
  • 举报
回复
是实现,继承被覆盖了
licip 2012-08-29
  • 打赏
  • 举报
回复
楼上所说的很正确
无敌波哥8 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

一楼说的对 既实现了接口里的方法,又重载了父类的方法,重载是巧合而已。

首先 implements I1 所以 class X 必须实现f1()方法。

其次 class C 里的f1() 方法是public的,和class X 的f1() 方法,返回值相同,参数列表也相同,
这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。

最后如果 cla……
[/Quote]

我说错了,SORRY。把重写说成了重载,下面是修改

一楼说的对 既实现了接口里的方法,又重写了父类的方法,重写是巧合而已。

首先 implements I1 所以 class X 必须实现f1()方法。

其次 class C 里的f1() 方法是public的,和class X 的f1() 方法,返回值相同,参数列表也相同,
这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。

最后如果 class C 里的f1() 方法是private的,那么class C 里的f1()方法就不会被 class X 所继承,因此就没有重写,只是实现。
无敌波哥8 2012-08-29
  • 打赏
  • 举报
回复
一楼说的对 既实现了接口里的方法,又重载了父类的方法,重载是巧合而已。

首先 implements I1 所以 class X 必须实现f1()方法。

其次 class C 里的f1() 方法是public的,和class X 的f1() 方法,返回值相同,参数列表也相同,
这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。

最后如果 class C 里的f1() 方法是private的,那么class C 里的f1()方法就不会被 class X 所继承,因此就没有重载,只是实现。
David_Chen_88128 2012-08-29
  • 打赏
  • 举报
回复
...给个完整版本。
wozuiaijiahui 2012-08-29
  • 打赏
  • 举报
回复
额,这个怎么测试啊,初始化类,调用方法?
WAN198725 2012-08-29
  • 打赏
  • 举报
回复
写点代码方法测试下赛
libei_march 2012-08-29
  • 打赏
  • 举报
回复
接口中的方法被实现的同时他会覆盖父类同名的方法,因此可以肯定它是实现I1的.C中的方法被覆盖了..
lianxiaoye 2012-08-29
  • 打赏
  • 举报
回复
应该是既继承又实现了吧,但是你接口里面的方法是缺省的。不知道和这个有没有关系。你自己测试下
wangyongwansui 2012-08-29
  • 打赏
  • 举报
回复
你可以把接口当成光杆抽象类理解

你这层关系,应该这么来说

X继承了C,并重写了int fi()方法

而C中的int f1()方法继承自接口I1

也就是说
X x=new X();
C c=new X();
I1 i=new X();
都是正确的,都是父类的引用指向子类的对象

这里的
x.f1() c.f1() i.f1() 调用的方法都是 X实例中的f1();

do you understand?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧