Was ist die Elternklasse und was die Kindklasse?

Hallo,

wenn ich folgende Codezeile habe:


public class Klasse1 extends Klasse2{

}

Dann erbt hier die Klasse2 von der Klasse1.
Erben heißt ja nichts anderes als, dass die Klasse1 die Eigenschaften der Klasse 2 erbt.

Nun weiß ich nicht welche Klasse die Elternklasse und welche die Kindklasse in diesem Beispiel ist?

[quote=Javaman1991][…] erbt hier die Klasse2 von der Klasse1.
[…] die Klasse1 die Eigenschaften der Klasse 2 erbt.[/quote]

entscheide dich schon, erbt 1 von 2 oder 2 von 1?, kein Wunder dass dann noch weitere Verwirrung,
ein Grundlagenkapitel zu Erben in Java oder einfache Tests sollten das eindeutig klären
(definiere etwa in jeder Klasse eine individuell benannte Methode,
welche Klasse kann auch auf die Methode der anderen zugreifen, eben weil sie vererbt wurde, welche Klasse nicht?)

wenn die Erb-Richtung klar ist, dann eigentlich auch Eltern und Kind,
wie ist die Erb-Richtung bei Menschen?
genau, und Programmier-Begriffe übernehmen wie alle derartig angelehnten Begriffe meist die bekannte Bedeutung statt verquert anderes,

im Zweifel kann man nach solchen Begriffen auch noch in Suchmaschinen suchen und findet Beispiele oder idealerweise gleich Definitionen:

soweit ein Posting, bewußt ohne direkt eine Frage zu beantworten :wink:
sollte wirklich auch so gehen…

wenn man sich die deutsche Übersetzung anschaut, wird es auch schon ein wenig klarer
Klasse1 extends Klasse2 wird dann zu Klasse1 erweitert Klasse2
(Und da “erweitern” soviel bedeutet wie “in seiner Ausdehnung, in seinem Umfang vergrößern” heißt es in dem Fall das die Klasse1 nun die Eigenschaften von der Klasse2 hat und möglicherweise noch mehr)

[quote=Javaman1991]Nun weiß ich nicht welche Klasse die Elternklasse und welche die Kindklasse in diesem Beispiel ist?[/quote]Das ist wirklich schwer: erben die Eltern von den Kindern oder umgekehrt?

bye
TT

Vererbung kann man mit einer IST eine Beziehung erklären
Nehmen wir mal ein einfaches Beispiel aus der Natur
So haben wir als Basisklasse oder auch Elternklasse die Klasse Lebewesen. “public class Lebewesen{}”
Diese Klasse Lebewesen hat nun eine Funktion wie Atmen und ein Attribut wie Beine.
Die Klasse Säugetier erbt nun von der Klasse Lebewesen “public class Säugetier extends Lebewesen{}” und hat nun auch das Attribut Beine und die Funktion Atmen, welche vielleicht überschrieben wird, da ein Säugetier mittels einer Lunge atmet und nicht wie ein Fisch mittels Kiemen. Des weiteren hat es die Eigenschaft Fell, welche andere Lebewesen nicht hat.

Ich habe mich am anfang etwas verschrieben.
War keine absicht.

Ich schreibe hier nicht ohne Grund!

Das Beispiel mit dem Säugetier und dem Lebewesen ist absolut Logisch, doch leider wird man im Internet und bei anderen Quellen ständig verwirrt.
In meinem Java Buch gibt es ein Beispiel zur Vererbung.

Dieses lautet:

“class Rectangel extends Shape”

Bei der Erklärung steht, das die Klasse Rectangle von der Klasse Shape erweitert wird??

Das stimmt dann doch nicht.

Wenn das so sein sollte wie in der Erklärung, dann müsste der Code doch so aussehen:

“class Rectangel extends Shape”

Das müsste ja immer so sein:

class Kindklasse extends Elternklasse.

Dann ist die Erklärung falsch.

[quote=Javaman1991;131787]Das müsste ja immer so sein:

class Kindklasse extends Elternklasse.[/quote]
Stimmt.

[quote=Javaman1991]In meinem Java Buch gibt es ein Beispiel zur Vererbung.

Dieses lautet:

„class Rectangel extends Shape“
[/quote]

Wenn das so sein sollte wie in der Erklärung, dann müsste der Code doch so aussehen:

„class Rectangel extends Shape“

du schreibst 2x das Gleiche, 2x „class Rectangel extends Shape“??
wenn schon vorher auf welche Weise auch immer etwas falsch, dann doch besondere Vorsicht, lieber Posting doppelt checken…

nebenbei heißt es sicher ‚Rectangle‘, aber das ist verschmerzbar

Bei der Erklärung steht, das die Klasse Rectangle von der Klasse Shape erweitert wird??

‚von etwas erweitert werden‘ ist unschönes bis unklares Deutsch, insofern keine deutliche Klassifizierung, damit auch keine Falschaussage,
im Grunde aber auch kein Widerspruch zum bekannten Standard:

Shape ist die Basis,
Rectangle ist die Subklasse, eine Erweiterung,
~ Rectangle erweitert Shape,
~ Rectangle wird von Shape erweitert…,

nichts klingt nach der Gegenrichtung, dass Shape auf einmal Rectangle erweitert/ ausbaut

edit:
ok, falls man es so liest dass ‚Rectable von Shape beerbt wird‘, wie ein Onkel von einem Neffen beerbt wird,

aber der Satzbau ist hier wohl eher anders gedacht, nähmlich:
Rectangle wird erweitert, wo von aus erweitert? von der Klasse Shape aus,
so wie ‚ein Taschengeld vom Haushaltsbudget abgezweigt wird‘ :wink:

wie gesagt maximal unklares Deutsch, da sollten sich doch genug deutlichere Quellen finden lassen

[quote=Javaman1991]Dieses lautet:

“class Rectangel extends Shape”

Bei der Erklärung steht, das die Klasse Rectangle von der Klasse Shape erweitert wird??

Das stimmt dann doch nicht.[/quote]Doch es stimmt:

In der Klasse Rectangle kannst du zusätzliches Verhalten definieren, dass über das ererbte Verhalten der Klasse Shape hinaus geht, deren Verhalten also erweitert.

Ein Kindklasse erweitert immer seine Elternklasse.

Andererseits ist eine Kindklasse auch immer etwas spezieller als seine Elternklasse, weshalb man auch sagt: “Rectangle ist eine Spezialieriung von Shape…”

bye
TT

Das ist aber das Gegenteil von „wird erweitert“.

Das heißt also das eine Kindklasse die Eigenschaften einer Elternklasse erbt,
aber auch gleichzeitig die Elternklasse mit gewissen Eigenschaften erweitert.

MfG

PS: Sorry für den Fehler!

was genau heißt etwas für dich? etwas konkreter wäre in diesem Thread-langen Verwirrspiel hilfreich :wink:
‚das heißt also‘ nach Postings verschiedener User mit zig Punkten gehört verboten :wink:

dass du selber das mehrdeutige Wort ‚erweitert‘ benutzt ist auch nicht gerade hilfreich…,
(allgemein ja ok dahingesagt, jeder weiß was gemeint ist,
aber wenn bei dir Verständnisprobleme bei Formulierungen, jedes Wort auf die Goldwaage, dann just der ungeeignete Begriff)

deinem Text ist genauso zuzustimmen wie zuvor, bis auf das ‚gleichzeitig‘,
denn es gibt nur eine Sache, die du in zwei Zeilen wiederholend beschreibst

falsch wäre in jedem Fall anzunehmen dass die Elternklasse in irgendeiner Form verändert, selber erweitert wird,
sie weiß von Kinderklasse nichts, hat keinerlei neue Eigenschaften, hat überhaupt keine Änderung

trotzdem kann man sagen dass ‚die Kindklasse die Elternklasse erweitert‘,
aber eher in dem Sprachgebrauch, in dem eine baldige Fortsetzung die neue Star Wars-Welt erweitert…

die Aufgabe von Vererbung ist allein:
die Kindklasse übernimmt Dinge der Elternklasse + neues dazu, stellt eine Erweiterung da,
die Kindklasse ist etwas weiteres/ größeres/ fortgeschrittenes, eine neue Stufe,
die Elternklasse bleibt unverändert

edit:
ich suche die ganze Zeit noch nach guten ähnlichen Wortbeispielen:

die dritte Dimension im Weltraum verkompliziert die Navigation (bezogen auf Schiffe auf 2D-Flächen-Meer)
→ das heißt ja nun nicht dass auf einmal Schifffahrt komplizierter geworden ist, da ändert sich gar nix,
sondern dass das neue Andere, die Weltraumfahrt, eine größere Sache, auf dem Alten aufbauend, ist

[QUOTE=Javaman1991]Dann erbt hier die Klasse2 von der Klasse1.
Erben heißt ja nichts anderes als, dass die Klasse1 die Eigenschaften der Klasse 2 erbt.[/QUOTE]

Dann erbt hier die Klasse2 von der Klasse1.
Erben heißt ja nichts anderes als, dass die Klasse 2 die Eigenschaften und das Verhalten der Klasse 1 erbt.

er*ben duden, erben Wikipedia (genauer) suchen - Klasse 1==Elternklasse Klasse 2=Kindklasse …

Schubs: Erbe – Wikipedia

‚allgemein dahingesagt‘/SlaterB/TT trifft es eher.

‚Grundlagenkapitel zu Erben in Java‘ durchwühlen ist der richtige Tipp.

Um nochmal bei meinem Beispiel mit den Lebewesen zu bleiben, dadurch das es nun eine neue Erweiterte Spezialisierte Form eines Lebewesens ergibt, hat sich nix an der Basisklasse bzw Elternklasse Lebewesen verändert.
Nur die neuen Kinderklasse Säugetier oder auch Fisch oder Vogel hat zusätzliche Eigenschaften.
Die Klasse Lebewesen hat jedoch keine Ahnung, das es diese Klassen überhaupt gibt und was für Extras sie haben.

So ergibt sich natürlich die Frage warum macht man dann überhaupt sowas wie Vererbung, man könnte ja auch einfach 2 Unabhängige Klassen machen ohne Vererbung?
Ein Vorteil ist das man sich doppelten Code spart.
Ein weiterer Vorteil ist, das man nun mit Lebewesen arbeiten kann und dem Aufrufer an manchen stellen Egal ist, was für ein Lebewesen es ist, aber trotzdem spezielle Funktionen hat. Da die Spezielle Form eines Lebewesens, das Kindklasse nun nicht nur zusätzliche Funktionen und Eigenschaften hat, sondern eventuell auch Funktionen der Elternklasse überschreibt.

PS theoretisch kann man dann auch weiter von einer Kindklasse Erben und dann könnte eine weitere Spezialisierung von Säugetier das Pferd sein. Diese Erweiterung beeinflussen dann aber weder das Lebewesen noch das Säugetier. Das Pferd hat dann Eigenschaften von Lebwesen und Säugetier.

Auf diese Antwort habe ich gewartet:

“die Aufgabe von Vererbung ist allein:
die Kindklasse übernimmt Dinge der Elternklasse + neues dazu, stellt eine Erweiterung da,
die Kindklasse ist etwas weiteres/ größeres/ fortgeschrittenes, eine neue Stufe,
die Elternklasse bleibt unverändert”

Hätte mir das jemand gleich gesagt, dann wäre das Thema mit nur einer Antwort erledigt gewesen.

MfG und DANKE!

steht auch in jedem akzeptablen Lehrbuch,
dass daran wer scheitert ist einfach nicht vorgesehen, da könnte man ja jeden Satz dreifach umformulieren,
aber na gut, deswegen ja die Frage, deswegen gibt es Foren :wink:

5.8.1 Vererbung in Java

Java ordnet Klassen in hierarchischen Relationen an, in der sie Ist-eine-Art-von-Beziehungen bilden. Eine neu deklarierte Klasse erweitert durch das Schlüsselwort extends eine andere Klasse. Sie wird dann zur Unterklasse (auch Subklasse, Kindklasse oder Erweiterungsklasse genannt). Die Klasse, von der die Unterklasse erbt, heißt Oberklasse (auch Superklasse oder Elternklasse). Durch den Vererbungsmechanismus werden alle sichtbaren Eigenschaften der Oberklasse auf die Unterklasse übertragen. Eine Oberklasse vererbt also Eigenschaften, und die Unterklasse erbt sie.

Rheinwerk Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben

auch hier mit ‚erweitert‘, weil das normalerweise jeder versteht, immerhin nicht mit dem noch missverständlicheren ‚wird erweitert‘

kostenlos auch gleich Kind/ Eltern mit dabei,
was immer du sonst liest, vielleicht wechseln

Weil es in einem anderen Thread gerade Thema war und hier gut hin passt:

Nach aktuellem Erkenntniss-Stand soll (in Java) nur noch selten “echte” Vererbung eingesetzt werden.

Der Bessere Ansatz ist, die Vererbung (also die “ist ein”-Beziehung) über Interfces abzubilden und Code, der von verschiedenen Spezialisierungen gemeinsam genutzt werden kann in eigenständige Klassen auszulagern, die von den Spezialisierungen benutzt werden.

Beispiel:
“alt”```class GeometrischeFlaecheElternklasse{
List eckpunkte;
GeometrischeFlaecheElternklasse(List eckpunkte){ this.eckpunkte=eckpunkte;}

public int berechneFlaeche(){
return berechneFlaeche(eckpunkte) ;
}

protected int berechneFlaeche(List eckpunkte) {
// irgendeine Komplexe Berechnung
}
}

class GeometrischerKoerperKindklasse extends GeometrischeFlaecheElternklasse {
List eckpunkte;
GeometrischerKoerperKindklasse( List eckpunkte){
super(eckpunkte); // Problem: nur Teilmengen der Körbereckpunkte bilden Flächen…
this.eckpunkte=eckpunkte;
}
int berechneFlaeche() {
int gesamtFlaeche =0;
for(List seitenFlaeche : getSeitenFlaechen(eckpunkte))
gesamtFlaeche += super.berechneFlaeche(seitenFlaeche) ;
return gesamtFlaeche;
}
public int berechneVolumen(){
// hier Volumen berechenen…
}
}"neu":class FlaechenRechner{
public int berechneFlaeche(List eckpunkte) {
// irgendeine Komplexe Berechnung
}
}
interface GeometrischeFlaecheElternklasse {
int berechneFlaeche();
}
interface GeometrischerKoerperKindklasse extends GeometrischeFlaecheElternklasse {
int berechneVolumen();
}

class GeometrischeFlaeche implements GeometrischeFlaecheElternklasse {
List eckpunkte;
FlaechenRechner flaechenRechner;
GeometrischeFlaecheElternklasse(FlaechenRechner flaechenRechner,List eckpunkte){
this.eckpunkte = eckpunkte;
this.flaechenRechner = flaechenRechner;
}

@Override
public int berechneFlaeche(){
return flaechenRechner.berechneFlaeche(eckpunkte) ;
}
}

class GeometrischerKörper implements GeometrischerKoerperKindklasse {
List eckpunkte;
FlaechenRechner flaechenRechner;
GeometrischeFlaecheElternklasse(FlaechenRechner flaechenRechner,List eckpunkte){
this.eckpunkte = eckpunkte;
this.flaechenRechner = flaechenRechner;
}

@Override
public int berechneFlaeche(){
int gesamtFlaeche =0;
for(List seitenFlaeche : getSeitenFlaechen(eckpunkte))
gesamtFlaeche += flaechenRechner.berechneFlaeche(seitenFlaeche) ;
return gesamtFlaeche;
}
@Override
public int berechneVolumen(){
// hier Volumen berechenen…
}
}```
Selbstverständlich hinkt dieses Beispiel.
Besser wäre, dem Körper direkt seine Seitenflächen als Objekte vom Type GeometrischeFlaecheElternklasse im Konstruktor zu übergeben, dann hätte es aber keinen gemeinsamen Code mehr gegeben… ;o)

bye
TT

Diesen Satz hätte ich auch direkt verstanden:

"5.8.1 Vererbung in Java

Java ordnet Klassen in hierarchischen Relationen an, in der sie Ist-eine-Art-von-Beziehungen bilden. Eine neu deklarierte Klasse erweitert durch das Schlüsselwort extends eine andere Klasse. Sie wird dann zur Unterklasse (auch Subklasse, Kindklasse oder Erweiterungsklasse genannt). Die Klasse, von der die Unterklasse erbt, heißt Oberklasse (auch Superklasse oder Elternklasse). Durch den Vererbungsmechanismus werden alle sichtbaren Eigenschaften der Oberklasse auf die Unterklasse übertragen. Eine Oberklasse vererbt also Eigenschaften, und die Unterklasse erbt sie. "

Leider ist das in meinem Buch nicht so logisch erklärt.

Ich möchte einfach verstehen was da genau passiert, somit musste ich einfach nachfragen.
Leider erklären die Java-Programmiere alles immer so kompliziert.

Dann solltest du dir unbedingt die frei erhältliche Insel (ggf. zusätzlich) ansehen. Der Link wurde ja schon gebracht, nochmal zum Startpunkt des Buches:

Rheinwerk Computing :: Java ist auch eine Insel - index