2016-04-04 11 views
-7

Ich habe eine Frage, wie man einen Methodenaufruf an zwei verschiedenen Klassen von Objekten in Java arbeiten lassen kann. Zum Beispiel, wenn beide Klassen SListNode und DListNode dieselbe Methode size() verwenden möchten, um die Länge einer Liste zu messen. Ich möchte die Methode size nur einmal definieren, anstatt zweimal in den Klassen SListNode und DListNode explizit zu schreiben.Wie polymorphism in Java anwenden?

Ich denke, Vererbung ist notwendig. Definieren Sie beispielsweise eine Oberklasse Size, die die size() -Methode enthält. Sowohl SListNode als auch DListNode sind Unterklassen von Size. Bei der Definition der Methode size() ist auf diese Weise jedoch ein bestimmter Listentyp erforderlich. Daher kann das Verfahren nicht auf SListNode und DListNode angewendet werden.

Ich fragte mich, wie die Vererbungsstruktur aussehen sollte oder ob es eine Standardmethode gibt, um diese Art von Frage zu lösen? Ich denke, es gibt und deshalb hat Java Polymorphismus. Aber es ist schwer für mich herauszufinden ...

+1

Schauen Sie sich auf: [Java Polymorphism ] (https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) –

+2

'Java.polymorphism (apply);' – Gendarme

+1

Mögliches Duplikat von [Polymorphismus gegen Überladung gegen Überladung] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading) – wiredniko

Antwort

0

Sie sollten anders denken. Zum Beispiel: Erstellen Sie eine abstrakte Klasse ListNode und setzen Sie nicht spezifischen Code hinein (implementieren Sie nicht die Listen selbst. Implementieren Sie die Size-Methode für ListNode. Zum Beispiel konnte die Size-Methode nur eine Eigenschaft lesen (geschützte int-Größe)

erstellen SListNode und DListNode Klasse, erstreckt ListNode und spezifischen Code zu implementieren. Seien Sie sicher, dass die Größe Eigenschaft in Ihrer Implementierung zu aktualisieren.

2

Was möchten Sie ist tun, um die Methode Größe zu setzen() als eine Methode der B. eine Klasse namens Node.

Dann machen Sie SListNode und DListNode erweitern Node. Die Methode size() wird vererbt und muss nur in der Klasse Node implementiert werden. Hier

ist die Struktur:

der übergeordneten Klasse:

public class Node { 

    //Parent class 

    //size() method will be inherited by children 
    public void size(){ 
    //Put implementation of size() here 
    } 
} 

Die Kinder:

public class DListNode extends Node { 

    //size() method is inherited 

    // put the rest of your body here 

} 


public class SListNode extends Node { 

    //size() method is inherited 

    // put the rest of your body here 


} 

hoffe, das hilft :)