Methoden der Oberklasse ausblenden

8

Ich habe das Methoden zum Überschreiben und Ausblenden gelesen. Und daraus habe ich Folgendes zusammengestellt:

  

Wenn eine Unterklasse eine Klassenmethode mit derselben Signatur wie a definiert   Klassenmethode in der Oberklasse, die Methode in der Unterklasse versteckt die   eins in der Oberklasse.

Als solches habe ich Folgendes getan:

%Vor%

Was ich an diesem Design nicht mag ist, dass append immer noch eine sichtbare Methode der Unterklasse ist. Anstatt den UnsupportedOperationException zu werfen, hätte ich den Körper leer lassen können. Aber beide fühlen sich hässlich an.

Gibt es einen besseren Ansatz zum Verstecken von Methoden der Oberklasse?

    
mrkhrts 14.09.2011, 17:07
quelle

3 Antworten

11

Verwenden Sie, wenn möglich, die Komposition. Dies wird von Joshua Bloch in Effektive Java, zweite Ausgabe empfohlen.

Punkt 16: Favorisieren Sie die Komposition über die Vererbung

Zum Beispiel:

%Vor%     
dogbane 14.09.2011, 17:16
quelle
3

Nein, das weiß ich.

Es ist ein OOP-Problem / Feature. Ihre Klasse ist immer noch eine JTextArea, und als solche könnte sie von Code verwendet werden, der Sie nicht als Unterklasse kennt, der sie als JTextArea behandeln würde, wobei erwartet wird, dass alle Methoden in JTextArea vorhanden sind und ordnungsgemäß funktionieren.

Wenn Sie eine neue Schnittstelle definieren müssen, sollten Sie eine neue Klasse definieren, die JTextArea nicht erweitert, sondern stattdessen einkapselt.

    
Simone Gianni 14.09.2011 17:12
quelle
1

Ja, verwenden Sie lieber einen Delegierten, anstatt ihn zu erweitern .

    
Garrett Hall 14.09.2011 17:11
quelle

Tags und Links