对Java接口的怀疑实现

时间:2011-09-26 07:59:50

标签: java

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吗?

10 个答案:

答案 0 :(得分:6)

Phone3扩展ElectronicElectronic使用方法doIt(),实现Device接口。因此,doIt方法的实现仅从Electronic基类继承。

如果你让这个例子更加真实,那就更有意义了。使用Device方法将Ringable更改为ring。创建一个实现SimplePhone的基类Ringable,并实现ring方法。并创建一个名为SimplePhone的{​​{1}}的子类。美丽的粉红色手机可以响,因为它只是一个粉红色的简单手机。

答案 1 :(得分:2)

{p> implements DevicePhone3类定义中是多余的。继承从Device类实现Electronic接口的事实的类。

也就是说,每个扩展Electronic的类也在实施Device,并且还继承了doIt提供的Electronic的实现。每个人都可以通过覆盖它来扩展/提供doIt的不同实现。

答案 2 :(得分:1)

因为Phone3扩展了Electronic和Electronic已经实现了doIt()方法。

答案 3 :(得分:1)

它有效,因为Electronic实现了Device。您是否尝试过在主类中没有接口实现进行编译?

答案 4 :(得分:1)

Phone3Electronic类继承。

答案 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方法的空实现 所以它不需要它,除非它需要覆盖行为。