2016-05-18 4 views
0

Ich habe eine zwei clases:Java, wie untergeordnete Anrufmethode an Eltern übertragen wird?

public class FlowItem { 

} 

public abstract class Flow extends FlowItem { 
    protected LinkedList<FlowItem> items = new LinkedList<FlowItem>(); 

    public abstract void show(FlowItem item); 
} 

ich nächste Führungsstruktur haben:

public class AuthFlow extends Flow { 

    public AuthFlow() { 
     items.add(new PrivacyFlow()); 
     items.add(new ExtendedPrivacyFlow()); 
     items.add(new FinalFlowItem()); 
    } 

    public void show(FlowItem item) { 
     // drawing logic 
    } 
} 

PrivacyFlow und ExtendedPrivacyFlow auch von Flow erweitert. FinalFlowItem erweitert von FlowItem. Die Frage ist: wie man Single \ parent Implementierung von show(...) Methode verwenden? Ich möchte Zeichnungslogik an einem Ort behalten.

+0

Wenn Sie Ihre Show-Methode als eine nicht-abstrakte Methode in das übergeordnete Objekt FlowItem einfügen, könnte es wie gewünscht funktionieren? Du definierst einmal deine Methode und verwendest sie in allen deinen Kindern – Alex

+0

Wahrscheinlich möchtest du über https://en.wikipedia.org/wiki/Open/closed_principle lesen. Beginnen mit: Wenn Sie "zeigen" Logik sollte üblich sein, dann gut, implementieren Sie diese Methode in Ihrer Basisklasse. Das ist, wofür Basisklassen am Ende sind: um allen Unterklassen ein ** allgemeines ** Verhalten zu geben. – GhostCat

+0

machen Sie eine konkrete Methode in der abstrakten Klasse. – Milaci

Antwort

0

Sie show Methode ist abstrakt, was bedeutet, dass jede Klasse, die von ihr erbt, die Methode implementieren muss. Ich gehe davon aus, dass Sie Informationen in Ihren untergeordneten Klassen haben, die für das Rendern relevant sind, und in diesem Fall könnten Sie diese Informationen relativ leicht in die Klasse Flow verschieben. Sie können eine Dateneinkapselungsmethode verwenden, die ähnliche Informationen enthält.

0

Was Sie tun müssen, ist einfach die show-Methode in der Elternklasse als endgültig zu ändern, auf diese Weise verhindern Sie das Überschreiben in Ihren Unterklassen.

public final void show(FlowItem item){ 
//your code here 
} 
Verwandte Themen