Vererbung von Java Klassen verhindern, verbieten, ausschließen: So gehts
Schlagwörter: Java Klasse, Java Vererbung


Man kann die ganze Java Vererbung für bestimmte Klassen ausschließen bzw. verhindern oder verbieten.
Was soll das?
Für bestimmte Java Klassen soll die Vererbung ausgeschlossen werden.
Es soll also verhindert werden, dass Elternklassen – Kindklassen bekommen können.
Klingt ein bisschen wie Verhütung, oder?
Denn wie auch im echten Leben, können Kinder zu kleinen Tyrannen werden.
Sie bedienen sich der elterlichen Ressourcen und machen damit was sie wollen.
Wo soll das nur enden?
Nun stell dir mal folgendes vor:
Du hast eine Klasse Tier und diese Klasse hat weitere Unterklassen zum Beispiel Pferd.
Das Pferd hat wiederum Unterklassen für Haflinger, Ponys oder Przewalski-Pferde.
Irgendwann muss doch auch mal Schluss sein.
Nach dem Przewalski-Pferd – was soll da noch kommen?
Eine Unterklasse, wie kleines und großes Przewalski-Pferd macht keinen Sinn.
Hier endet diese Vererbungslinie also.
Jede weitere Kindklasse von dieser Pferdeart würde das Programm nicht verbessern.
Ganz im Gegenteil – Es würde das Programm nur noch verschlechtern, es unnütz aufblähen und unverständlich machen.
Du, als Entwickler, so eines Pferdeprogrammes solltest darauf achten, dass du die Vererbungslinie irgendwann einmal enden lässt.
Denn die Superklassen kennen ihre Kinder nicht.
Das einfache Setzen des Keywort extends reicht völlig aus.
Und schwuppdiwupp sind die Super- oder Oberklassen stolze Eltern.
Aus einer ganz allgemeinen Klasse „Tier“, wird die speziellere Kindklasse „Pferd“.
So wie hier.
public class Tier {
int alter; //Alter des Tieres
int groesse;//Größe des Tieres
int anzahlBeine;//Anzahl der Beine
}
Und die Klasse Pferd erbt von Tier.
public class Pferd extends Tier{
}
Und diese Kindklasse kann dann einfach die Variablen zur Größe, zum Alter oder zur Anzahl-der-Beine übernehmen.
Frechheit, oder?
Wenn du dann eine Programmstartklasse mit main-Methode anlegen würdest, könntest du dort die Kindobjekte erzeugen.
Und dieses neue Kindobjekt hätte Zugriff auf alle Instanzvariablen der Elternklasse.
public class ProgrammStart {
public static void main(String[] args) {
Pferd pferdEins = new Pferd ();//neues Pferd-Objekt
pferdEins.alter=12;//Pferd hat ein Alter von 12
pferdEins.groesse=122;//Pferd hat eine Größe von 122 cm
pferdEins.anzahlBeine=4;//Pferd hat vier Beine
}
}
Krass oder?
Hier das Bild dazu.

Das Schlimmste dabei ist, dass die Elternklassen dies gar nicht mitbekommen.
Sie wissen nicht einmal, dass sie Kinder haben.
Die Kindklassen kennen ihre Eltern schon.
Denn schließlich erweitern sie die Elternklassen ganz bewusst, durch den Zusatz extends.
Unfair, oder?
Damit muss Schluss sein.
Wir leben schließlich im 21. Jahrhundert, sind aufgeklärt worden und kennen die Möglichkeit zur Verhütung.
Also sind hier drei Möglichkeiten, wie du die Vererbungsmöglichkeiten für Klassen eindeutig verhindern kannst.
Nicht öffentliche Klassen verhindern die Vererbung für ganz bestimmte Klassen.
Öffentliche Klassen sind mit dem Keywort public ausgezeichnet.
Unsere beiden Klassen „Tier“ und „Pferd“ sind ebenfalls public-Klassen.
Ich lege jetzt einmal eine weitere Klasse, namens „Hund“ für speziellere Pferde an.
Blöd oder?
Aber theoretisch möglich.
Das Pferd hätte nicht einmal ein Mitbestimmungsrecht.

Ich lege jetzt drei Packages an.
Eines für Hunde, eines für Pferde und eines für allgemeine Tiere.

Und verschiebe dann per Drag and drop die Klassen in die Packages.

Durch das verschieben passiert so Einiges.
- In allen Klassen befinden sich danach die package-Importe ganz oben.
- Da die Tierklasse sich jetzt in einem neuen package befinden – kann die Programmstartklasse nicht mehr auf die Instanzvariablen der Tierklasse zugreifen.
- Du musst also die Instanzvariablen auch als public anbieten.

Und was passiert noch?
Hund erbt immer noch von einem Pferd.

Alles bis hierher war nur die Vorbereitung – das Warm Up.
Jetzt kommt das Entscheidende.
Mach einmal die Klasse „Pferd“ nicht explizit öffentlich.
Streiche also das Keywort public.

Und jetzt ist es für den Hund unmöglich ein Pferd zu sein.
Das bedeutet jetzt für Dich:
Eine Klasse kann nur von einer anderen package-fremden Klasse erben, wenn diese public ist.
Von einer nicht-public oder nicht-öffentlichen Klasse können nur innerhalb des gleichen Package – Kindklassen gebildet werden.
Aber….
Dies ist sehr ungewöhnlich und auch nicht der beste Weg, um in Java Vererbung zu verhindern.
Die zweite Möglichkeit die Vererbung in Java zu verbieten – läuft über den Konstruktor.
Und zwar kannst du in der Superklasse einen privaten default-Konstruktor anbieten.
Somit wird das einfache Erstellen eines neuen Objektes nicht möglich.
Und die Kindklasse, welche sich auf den Konstruktor der Superklasse beruht – kann diesen ebenfalls nicht nutzen.

Aber auch diese Lösung ist suboptimal.
Die beste Lösung um in Java Vererbung zu verhindern, bietet das Keywort final.
Stichwort sind finale Klassen.
Diese können nicht überschrieben werden.
package pferdepackage;
import tierpackage.Tier;
public final class Pferd extends Tier{
}
Sobald du eine Klasse als final kennzeichnest, ist eine Erweiterung durch Unterklassen ausgeschlossen.
Und dies ist die herkömmliche Lösung.
Diese finale-Klassen-Lösung solltest du eigentlich immer nutzen.
Und deshalb….
Nur wenn du dir wirklich irgendetwas besonderes dabei denkst, nutze die beiden anderen Lösungen.
Zusammenfassung:
- Es macht immer Sinn den Ausstieg zu planen.
An irgendeiner Stelle ist immer Schluss mit Vererbung.
- Einen noch spezielleren Typen einer Klasse gibt es dann nicht mehr bzw. es macht keinen Sinn dies anzubieten.
Und deshalb solltest du in Java Vererbung auch verhindern bzw. verbieten.
Nicht gänzlich.
Du solltest nur einige bestimmte Klassen von der Java Vererbung ausschließen.
- Dabei stehen dir drei Möglichkeiten zur Verfügung. Neben privaten Konstruktoren, nicht-öffentlichen Klassen in fremden Packages – bietet es sich an, Klassen mit dem Modifier final auszuzeichen.
Ähnliche Beiträge
Schlagwörter: Java Klasse, Java Vererbung
Vererbungsbaum in Java – klingt erstmal komisch. Dennoch wird dies so bezeichnet. Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen. Wie sieht das nun konkret aus? Vererbung bedeutet: Du definierst einen allgemeinen Typen – zB. Möbel Und dann implementierst du […]
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung, Java Variablen
Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied zwischen […]
Schlagwörter: Java Klasse, Java Programmierung
Java ist eine objektorientierte Programmiersprache und dieses Konzept setzt auf Java Klassen. Diese Aussage nimm bitte jetzt erst einmal so hin. Ich werde im Laufe des Artikels den Zusammenhang herstellen.
Schlagwörter: Java Klasse, Java Programmierung
Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held […]
Schlagwörter: Java Klasse
Die Java Klassen Initialisierung durchläuft zwei Phasen. Diese beiden Phasen sind im Grunde genommen, wie die Phasen 2 und 3 bei der Instanz-Initialisierung.
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung, Java Variablen
Ja, ich fange sämtliche Artikel so an. Und du weißt es mittlerweile. Aber die Java Klassen stellen Baupläne für die Objekte dar, welche du erschaffen willst. Und in so einem Bauplan oder einer Gebrauchsanweisung brauchst du zwingend bestimmte Eigenschaften. Ich habe dir ja im letzten Artikel gezeigt, wie du eine […]
Schlagwörter: Java Klasse, Java Programmierung
Datum und Uhrzeit mit Java. – Wie geht das? Es gibt verschiedene Möglichkeiten das Datum und auch die Uhrzeit in Java darzustellen. Eine Möglichkeit bietet die Java Klasse Calendar. Lass uns einmal einen Blick hinein werfen.
Schlagwörter: Eclipse Programmierung, Java Keyword, Java Klasse, Java Programmierung
Es macht durchaus Sinn deine Java Klassen in verschiedenen Paketen zu organisieren. Wieso? Es sprechen mehrere Gründe dafür: Du kannst doppelte Klassennamen verwenden Du kannst deinen Code oder deine Klassen inhaltlich trennen Du kannst Hierarchien abbilden. Und genau um diese Dinge geht es in diesem Beitrag
Schlagwörter: Java Instanzen, Java Klasse
Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.
Schlagwörter: Java Methoden, Java Polymorphie, Java Vererbung
In Deutschland entstehen jeden Tag tolle Geschichten. So wie diese hier…. Die größte Turmuhr der Welt, die Makkah Clock, steht in Saudi – Arabien. Und zwar direkt in Mekka. Hier ein paar Eckdaten zur Uhr: Höhe des Turmes 601 m. Das Ziffernblatt der Turmuhr hat einen Durchmesser von 43 Meter […]
Schlagwörter: Java Instanzen, Java Klasse, Java Methoden, Java Programmierung
In einen der letzten Beiträge habe ich dir gezeigt, wie du eine Klasse anlegen kannst. Ich habe die Klasse „Mensch“ oder „Human“ angelegt und wir haben die erste Instanzvariable implementiert. Dein Code sollte jetzt so aussehen: public class Human { int size=156;//size in centimeter } In diesem Beitrag werde ich […]
Schlagwörter: Java Programmierung, Java Vererbung, Vererbung
Java ist eine objektorientierte Programmiersprache. Und das bedeutet nicht nur, dass du Objekte einer Java Klasse erzeugen kannst. Es bedeutet auch, dass Java Klassen von anderen Klassen erben können. Wieso das Ganze? Stell dir einmal ein Rollenspiel vor. Wie würdest du ein Rollenspiel entwerfen? In einem Rollenspiel gibt es magische […]
Schlagwörter: Java Instanzen, Java Klasse, Java Vererbung
Im letzten Beitrag habe ich dir das Java Vererbung Konzept an einem Beispiel vorgestellt. In dem Beispiel-Rollenspiel gab es Klassen zu Helden und Superhelden. Ich habe dir die Vererbungshierarchien theoretisch erläutert. Jetzt geht es ans Praktische. In diesen Beitrag lernst du: Wie du bestehende Java Klassen erweiterst Wie du Objekte […]
Schlagwörter: Eclipse Programmierung, Java Klasse, Java Programmierung
Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum […]
Schlagwörter: Java Konstruktor, Java Polymorphie, Java Vererbung
Klassen sind Baupläne für Java Objekte. Java Konstruktoren sind ganz konkrete Baupläne für deine Objekte. In einen der letzten Beiträge zur Java Vererbung, habe ich dir gezeigt – was polymorphe Arrays sind und wie du diese anlegst. Dazu hatten wir das Beispiel mit den Kleidungsstücken. Spinnen wir dieses Beispiel einfach […]
Schlagwörter: Java Instanzen, Java Klasse
Die Instanzierung von Java Klassen verhindern. Was heißt das? Instanzen sind die Objekte einer Java Klasse. Und Instanzieren oder Instanzierung heißt nichts anderes, als Objekterstellung. Aber was soll das? Oder mal anders gefragt: Wieso sollte man verhindern, dass eine Java Klasse – Objekte erstellen kann? Schließlich sind doch Objekte der […]
Schlagwörter: Java Instanzen, Java Klasse, Java Vererbung
Java Vererbung hat nichts mit Biologie zu tun. Die Genetik besagt, dass bestimmte Merkmalsausprägungen von den Eltern auf die Kinder übergehen. Solche Merkmalsausprägungen sind: die Hautfarbe die Haarfarbe die spezifische Größe und weitere körperliche Merkmale. Und in Java – was ist da Vererbung? Lass es uns herausfinden. Was erwartet dich […]
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung
Lass uns jetzt ein paar Java Objekte erstellen. Im letzten Beitrag habe ich dir gezeigt, was nötig ist um ein Java Programm überhaupt zu starten. Ich habe dir gezeigt, wie du eine zweite Klasse anlegst und die main Methode implementierst. Du hast gesehen, dass die Anweisung, welche wir in die […]
Schlagwörter: Java Klasse, Java Methoden, Java Strings
In einen der letzten Beiträge haben wir darüber gesprochen, dass Java Strings – Objekte sind. Dass Strings in allen Programmen äußerst häufig vorkommen Und dass sich deshalb Referenzvariablen String-Objekte im String Pool teilen. Das Konzept hinter dem String-Pool ist die Teilung der Ressourcen. Und das bedeutet: Weniger Objekte – mehr […]
Schlagwörter: Java Programmierung, Java Vererbung
„Manchmal findet Java Vererbung auch zwischen Einkaufstüten und Polizeiautos statt“ Irrer Titel, oder? Aber mal Hand aufs Herz. Was haben eigentlich eine Einkaufstüte und ein Polizeiwagen gemeinsam? Ich verrate dir etwas: Du kannst die Verbindung nicht erkennen, denn ich habe dir nicht alles verraten. Es fehlt noch ein wichtiger Aspekt […]
Schlagwörter: Java Instanzen, Java Klasse, Java Übungen
In dieser Java Übung, wirst du ein Objekt erstellen.
Schlagwörter: Java Klasse, Java Vererbung
Bei der Java Vererbung gibt es zwei Klassenarten bzw. -stufen. Die Superklassen, welche einen allgemeinen Typen darstellen Und die spezielleren Unterklassen, welche die Superklasse um bestimmte Funktionen erweitern. Jetzt ist dieses ganze „Der-erbt-von-dem-Konzept“ mitunter sehr schwierig darzustellen. Zum Beispiel in einem Werkzeugkoffer. In einem Werkzeugkoffer befinden sich sämtliche Werkzeuge, von […]
Schlagwörter: Java Klasse
In diesem Beitrag geht es um eine spezielle Java Klasse. Die Klasse nennt sich Java Math. Diese ist in der Standardbibliothek von Java enthalten. Warum solltest du diese Klasse kennen? Die Math Klasse bietet dir einen Menge Methoden an, welche zur Berechnung von mathematischen Gleichungen ganz hilfreich sind. Aber auch […]
Schlagwörter: Java Klasse, Java Programmierung
Utility Java Klassen – was ist das? Man nennt diese auch Hilfsklassen von Java. Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten. Am Beispiel: Die Klasse Math ist so eine klassische Utility Klasse. Wozu braucht man solche Klassen? Diese Klassen sind so etwas wie ein Werkzeugkoffer […]