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?
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%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.
Ja, verwenden Sie lieber einen Delegierten, anstatt ihn zu erweitern .
Tags und Links java swing design method-hiding