2017-02-17 2 views
1

Während der Entwicklung einiger Demo-Anwendung, kam ich über eine Situation wie unten.Javas Art der Implementierung von Interface-Methoden in abgeleiteten Klasse

ich im Grunde drei Klassen unter anderem haben:

-One interface MyInterface 

-One base class MyBaseClass 

-One derived class MyDerivedClassExtendsMyBaseClass 

In dieser Struktur MyBaseClass implementiert MyInterface. Java zwingt mich, die Methoden von MyInterface in der MyBaseClass zu implementieren.

Wenn MyDerivedClassExtendsMyBaseClass auch MyInterface implementiert, zwingt mich Java nicht, die Methoden von MyInterface zu implementieren. Es liegt an mir, MyInterface-Methoden zu überschreiben.

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!! 
} 

Gibt es dafür einen speziellen Zweck? Warum muss ich die Methode der Schnittstelle MyInterface nicht implementieren, obwohl meine abgeleitete Klasse sie implementiert?

Danke!

Antwort

1

Weil Ihre abgeleitete Klasse MyBase Klasse erweitert und es bereits gezwungen hat, Methoden von MyInterface zu implementieren. Da die abgeleitete Klasse ein Kind von MyBase ist, kann sie von der Superklasse erben, so dass sie nicht erneut implementiert werden müssen. Es gibt immer eine Implementierung dafür (gerade jetzt von Eltern).

Wenn Sie die Erweiterungen entfernen, werden Sie erneut gezwungen, in der abgeleiteten Klasse zu implementieren.

+0

Aber wenn Sie Oracle Seite erklären Schnittstelle überprüfen, heißt es: "Wenn Ihre Klasse behauptet, eine Schnittstelle zu implementieren, müssen alle von dieser Schnittstelle definierten Methoden im Quellcode angezeigt werden, bevor die Klasse erfolgreich kompilieren wird." In meiner Situation gibt es eine Klasse behauptet, die Schnittstelle MyInterface zu implementieren, aber der Code von myMethod nicht unbedingt im Quellcode meiner abgeleiteten Klasse. Durch die Vererbung wird die Definition von myMethod in meiner abgeleiteten Klasse geerbt, aber bedeutet das wirklich, dass meine abgeleitete Klasse die Definition von myMethod im Quellcode hat? –

+1

@UgurKAYA Genau. Der gesamte Quellcode des Quellcodes wurde in den Quellcode des untergeordneten Elements gepackt. –

Verwandte Themen