Java Interface Methode gleichnamig wie die vererbte Methode aus der superklasse?

...komplette Frage anzeigen

5 Antworten

Ist die Frage ob hier wirklich eine Unterscheidung nötig ist.

Gehen wir dein Beispiel mal durch:

Du hat eine Klasse Kugel:

class Kugel {

    public void rollen() {
       System.out.println("ich rolle so schön");
    }
}

Sowie ein interface: Rollbar:

interface Rollbar {

    public void rollen();

}

Jetzt soll deine Klasse: BowlingKugel ausformuliert werden, also:

class BowlingKugel extends Kugel implements Rollbar{

}

Dann brauchst du in der Klasse BowlingKugel die Methode rollen nicht ausformulieren. Denn das Interface prüft: "Ist die Methode rollen() in der implementierenden Klasse vorhanden?"  schaut in der Klasse und in dessen vererbenden Klassen nach und stellt fest: ja." und somit brauchst du diese nicht nochmal implementieren.

Wenn das Interface genutzt wird irgendwo, wird in der Implementierenden Klasse die Methode rollen() ausgeführt. Dabei spielt es keine Rolle, ob diese in einer anderen Super-Klasse oder in einem anderen Interface auch schon benötigt wird.

Anders verhält es sich natürlich, wenn es andere Rückgabewerte, Parameter oder Zugriffsrechte gibt.

Der Compiler unterscheidet die Methoden nicht. Er nimmt an, dass sie umsonst implementiert sind. Dazu musst auch die Typen der Parameter gleich sein.


Nächste interessante Frage

[Linux Shell] Bestimmte Elemente aus einer Variabel entfernen?

Weiß ich gerade nicht, ich probiers nacher mal aus. Die Antwort ist nur dafür da, dass ich die Frage wieder finde. Ich glaub dass bei einem Aufruf die für das Interface aufgerufen wird und die von der Superklasse einfach überschrieben wird.

Du kannst es ja auch selbst ausprobieren

habe dieses Wochenende leider keine Programmieroberfläche zur Hand. hatte gehofft irgendwer weiß das so auf dem effeff ;) wenn du das später ausprobierst, wäre ich dir dankbar :)

0

Wenn du die Methode nicht in deiner Klasse überschreibst, wird die Methode der Superklasse aufgerufen.

Wenn du die Methode in deiner Klasse überschreibst, dann wird nur die Überschriebene aufgerufen.

Wenn du die Methode in deiner Klasse überschreibst und zuerst super.rollen(); aufrufst, werden beide ausgeführt.

Zur Methodensignatur gehören Parameter und Name.

Wenn die Signatur gleich ist, dann sollte der Klasse damit eigentlich nur Stillschweigend der Interfacetype hinzugefügt werden.

Wenn man eine abstrakte und eine vordefinierte Quelle erbt, dann sollte es das einfach übernehmen, aber das werd eich prüfen.

Ja, übernimmt alles ohne Beschwerden.

0

Was möchtest Du wissen?