In Java können auch bestimmte Klassen nicht erweitert werden. Z.B. ist java.lang.String
final.
Ausserdem gilt eine Über-Benutzung von Vererbung als schlechter OO-Stil. (favour composition over inheritance). Es bricht separation of concern. Eine Klasse wie NotesDocument erfüllt seinen Zweck.
Praktisch jedes selbstrespektierende OO-Buch warnt vor einer Überbenutzung von Vererbung (z.B. Gang of Four, Domain Driven Design)
Man sollte da nicht eigenes per Vererbung dranwerkeln, sondern eher in einer eigenen Klasse NotesDocument benutzen:
class MyClass {
NotesDocument doc;
public MyClass (NotesDocument doc) {
this.doc = doc;
}
public void myStuffWithDoc() {
... do stuff with doc ...
}
Das ist in 99.5% der Fälle besser.
Domingo (
http://domingo.sourceforge.net/) geht sehr weit in der Erzeugung eigener Notes Produkt-Klassen (per Composition). Im dortigen Source Code kannst du dir anschauen wie das geht. Die machen das zum großen Teil, um recycle() im Anwender code unnötig zu machen. Ist aber sehr viel Arbeit, weil du irgendwann dabei endest, sämtliche Methoden der originalen Notes-Produktklassen selbst zu implementieren.
In J2EE aka EE5 und JUnit4 wurden übrigens ganz viele Vererbungsbeziehungen weggemacht, wobei das zugegeben nur wegen Java Annotations möglich war, so dass dieses Argument polemisch ist, weil Annotations auch eine Art von kontextabhängiger Vererbung bewirkt.
Ich hab in meinen Leben noch keine Klasse des Java Collection Frameworks (sowas wie java.util.List, java.util.HashSet oder java.util.Vector überschrieben. Wozu auch?
Auch in modernen Java-Frameworks wie Spring und Hibernate überschreibst du meist nur abstrakte Klassen, die extra dafür vorgesehen sind, dass sie überschrieben werden. Ich würd in meinem Leben nicht die Spring-Produktklasse ApplicationContext überschreiben. Anfänger könnten das für eine gute Idee halten. Es ist in 99.9% der Fälle eine schlechte Idee.
In eigenen kleinen Frameworks, die ich schreiben mußte, gab ich den Benutzern auch immer nur bestimmte Methoden zum überschreiben. Total viel Methoden mach ich final, Klassen sowieso (bessere Kapselung).