interface Device
{
public void doIt();
}
public class Electronic implements Device
{
public void doIt()
{
}
}
abstract class Phone1 extends Electronic
{
}
abstract class Phone2 extends Electronic
{
public void doIt(int x)
{
}
}
class Phone3 extends Electronic implements Device
{
public void doStuff()
{
}
}
任何人都可以告诉我为什么这会编译..因为“Phone3”实现了Device,它应该有doIt()方法,但它没有。但这仍然是编译。我可以认识Y吗?
答案 0 :(得分:6)
Phone3
扩展Electronic
,Electronic
使用方法doIt()
,实现Device
接口。因此,doIt
方法的实现仅从Electronic
基类继承。
如果你让这个例子更加真实,那就更有意义了。使用Device
方法将Ringable
更改为ring
。创建一个实现SimplePhone
的基类Ringable
,并实现ring
方法。并创建一个名为SimplePhone
的{{1}}的子类。美丽的粉红色手机可以响,因为它只是一个粉红色的简单手机。
答案 1 :(得分:2)
implements Device
在Phone3
类定义中是多余的。继承从Device
类实现Electronic
接口的事实的类。
也就是说,每个扩展Electronic
的类也在实施Device
,并且还继承了doIt
提供的Electronic
的实现。每个人都可以通过覆盖它来扩展/提供doIt
的不同实现。
答案 2 :(得分:1)
因为Phone3扩展了Electronic和Electronic已经实现了doIt()方法。
答案 3 :(得分:1)
它有效,因为Electronic
实现了Device
。您是否尝试过在主类中没有接口实现进行编译?
答案 4 :(得分:1)
Phone3
从Electronic
类继承。
答案 5 :(得分:1)
Phone3扩展了Electronic并继承了它的所有方法。由于Electronic有一个doIt()方法,它编译。
答案 6 :(得分:1)
Phone3
扩展Electronic
因此它继承了doIt()
方法
答案 7 :(得分:1)
如果您在上面的代码中看到,Phone3已经实现了doIt()方法 在继承树中,即在电子课程中,如果你愿意的话 在你的Phone3类中调用doIt()方法它会正常工作,例如。
class Phone3 extends Electronic implements Device
{
public void doStuff()
{
}
public static void main(String...args)
{
Phone3 p3=new Phone3();
p3.doIt();
}
}
答案 8 :(得分:0)
Phone3
扩展Electronic
,已经实施doIt
。
答案 9 :(得分:0)
原因Phone3还扩展了Electronic,它具有doIt方法的空实现 所以它不需要它,除非它需要覆盖行为。