Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen?

Diskutiere Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? im Allgemeine Java-Themen Bereich.
Bitte aktiviere JavaScript!
S

sirbender

Ich gebe mal ein konkretes Beispiel: commons-collections4-4.4-sources

https://commons.apache.org/proper/commons-collections/download_collections

Java:
OrderedMap<String, String> map = new LinkedMap<>();
map.put("FIVE", "5");
OrderedMap ist ein Interface, dass das Put und java.util.Map Interface erweitert.

Map: V put(K key, V value)
Put: Object put(K key, V value)

LinkedMap leitet sich von AbstractHashedMap ab, welches V put(K key, V value) implementiert.

Was passiert dadurch? AbstractHashedMap ueberschreibt (laut Eclipse) damit Map.put und nicht Put.put. Wie wird das von Eclipse entschieden? Oder ueberschreibt das put in AbstractHashedMap BEIDE put in den jeweiligen Interfaces?

Und warum ist dann das Interface Put ueberhaupt da?
 
mihe7

mihe7

Der Trick bei Interfaces ist ja, dass es keine Implementierung gibt. Ergo wird auch nichts überschrieben oder aufgerufen. Die Implementierung eines Interfaces sagt nur, dass das Objekt die betreffenden Methoden anbietet.
 
S

sirbender

Der Trick bei Interfaces ist ja, dass es keine Implementierung gibt. Ergo wird auch nichts überschrieben oder aufgerufen. Die Implementierung eines Interfaces sagt nur, dass das Objekt die betreffenden Methoden anbietet.
Hmm. Das war mir so schon bewusst. Ich wundere mich, was das Put-Interface da macht?
 
mihe7

mihe7

Das steht doch in der Doku zu Put: The "write" subset of the Map interface. Sprich: die haben das Map-Interface aufgeteilt - zu welchem Zweck auch immer...
 
S

sirbender

Vielleicht geht es auch nur darum, dass man nur das Get-Interface z.B. als Rueckgabewert einer Methode definiert. So muss man dann keine Kopie einer Map zurueckgeben wenn man nicht will, dass neue Werte hinzugefuegt werden koennen.
 
mihe7

mihe7

Das könnte sein, erklärt aber noch nicht die Existenz des Put-Interface :)
 
M

Meniskusschaden

Wenn man einen ROWM-Speicher (read once write multiple) mit zerstörendem Lesezugriff realisieren will, wäre ja ein Writer sinnvoll, der nicht in der Lage ist, den Datenbestand beispielsweise durch Kontrolllesungen wieder kapput zu machen.;)
 
M

Meniskusschaden

Nein, nicht dass ich wüsste.;)
Wozu braucht man das?
Vielleicht zum Speichern von unnützem Zeug, das niemand braucht und automatisch verschwinden soll, wenn der Revisor es gesehen hat.;)

Ich finde deine Erklärung:
Oder man hat einfach das Interface-Segregation-Prinzip konsequent umsetzen wollen.
und das Anwendungsbeispiel von @LimDul
Vielleicht möchte ich eine Netzwerkschnittstelle als Map präsentieren und da kann ich nur schreiben und nicht lesen.
am überzeugendsten.
 
S

sirbender

Vielleicht kann man die Existenz des Put Interfaces auch so erklaeren, dass man es nutzt wenn auf die Map nicht 'concurrently' zugegriffen werden soll. Wenn ein Thread Werte der Map hinzufuegt und ein anderer durch die Map lesend iterieren koennte, hast du vielleicht eine ConcurrentModificationException.
So richtig macht das aber auch keinen Sinn, oder?
 
Thema: 

Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben