2017-02-17 141 views
1

在开发一些演示应用程序时,我遇到了类似下面的情况。Java在派生类中实现接口方法的方法

我等基本3类:

-One interface MyInterface 

-One base class MyBaseClass 

-One derived class MyDerivedClassExtendsMyBaseClass 

在这种结构中,MyBaseClass实现MyInterface的。 Java迫使我在MyBaseClass中实现MyInterface的方法。

当MyDerivedClassExtendsMyBaseClass也实现MyInterface时,Java不会强制我实现MyInterface的方法。我要重写MyInterface方法。

public interface MyInterface{ 

    public void myMethod(); 

} 

public class MyBase implements MyInterface{ 

    //some members and methods here 

    @Override 
    public void myMethod(){ 
     //You have to implement myMethod 
    } 
} 

public class MyDerivedClassExtendsMyBaseClass extends MyBase implements MyInterface{ 

    //You don't have to implement myMethod() here!! 
} 

这是否有特殊用途?为什么我不必实现接口MyInterface的方法,尽管我的派生类实现了它?

谢谢!

回答

1

因为您的派生类扩展了MyBase类,并且它已经被迫实施了MyInterface的方法。由于Derived类是MyBase的子类,它可以继承超类,因此不需要再实现它们。总是有一个实现它(现在从父母)。

如果删除了extends,那么您将被迫在派生类中实现。

+0

但是,当您检查Oracle的页面说明界面,它说: “如果你的类声称实现一个接口,通过该接口定义的所有方法必须出现在源代码中的类将成功编译之前。” 在我的情况下,有一个类声明实现接口MyInterface,但myMethod的代码不一定在我的派生类的源代码中。 通过继承,我的派生类继承myMethod的定义,但它确实意味着,我的派生类在其源代码中定义了myMethod? –

+1

@UgurKAYA正是。所有的父源代码都打包成子代码。 –