Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo
also ich bin eine ziemliche Java-Programmier-Flasche...
ich habe 2 Klassen gegeben bspw. die Klasse Vater und die Klasse Sohn. Jetzt brauch ich eine Methode welche mir den Opa eines Sohns herauswirft.Hab wirklich keine Ahnung und bin für jede Hilfe sehr dankbar...
danke im vorraus
-Sohn erbt von Vater erbt von Opa
- Vater hat eine Methode getParent{ return super();}
So könntest du dich durchhangeln
Möglichkeit 2
du speicherst direkt die Referenz (welche dir per Getter oder Constructor übergeben wurde) und gibst diese dann per getVater einfach zurück
argh... hier keine Vererbung reinbekommen... das ist keine Vererbungshierarchie.
Ein Vater kann natürlich auch ein Sohn sein (also Sohn vom Opa), dann aber eher den Vater als Instanzvariable speichern und nicht über Vererbung auflösen.
Also das mit zwei Klassen umzusetzen, halte ich auch für ziemlichen Humbug.
Wie wärs hiermit?
Java:
import java.util.ArrayList;
import java.util.Collection;
public class Person {
private Person vater;
private Person mutter;
private final Collection<Person> kinder = new ArrayList<Person>();
public Person getVater() {
return vater;
}
public void setVater(Person vater) {
if (this.vater != null)
this.vater.kinder.remove(this);
if (vater != null)
vater.kinder.add(this);
this.vater = vater;
}
public Person getMutter() {
return mutter;
}
public void setMutter(Person mutter) {
if (this.mutter != null)
this.mutter.kinder.remove(this);
if (mutter != null)
mutter.kinder.add(this);
this.mutter = mutter;
}
public Collection<Person> getKinder() {
return new ArrayList<Person>(kinder);
}
public boolean hatKinder() {
return !kinder.isEmpty();
}
}
Nun ja, wenn einer Person ein Elternteil zugeordnet wird, ist ja eine Änderung in
Code:
kinder
des Elternteils nötig.
Den Kram kann man sich natürlich sparen, wenn man die Elternteile
Code:
final
macht. Nur dann hat man das Problem, dass man beide wissen muss, bevor man eine Person erstellt, oder man geht dann eben in Kauf, dass mindestens ein Elternteil für immer
Code:
null
bleibt.
Außerdem sind setter ja auch dafür gedacht, dass man damit mehr machen kann, als einfach nur stumpf den Parameter einer Variable zuzuweisen.
es ist aber schonmal nicht die Aufgabe von Person sich darum zu kümmern. Und nach deinem Code zu urteilen wäre es möglich mehrfach einen Vater zu setzen... worin liegt da der sinn ?
Den Kram kann man sich natürlich sparen, wenn man die Elternteile
Code:
final
macht. Nur dann hat man das Problem, dass man beide wissen muss, bevor man eine Person erstellt, oder man geht dann eben in Kauf, dass mindestens ein Elternteil für immer
Wie würde man es dann regeln? Über einen PersonManager? Dann müsste man ja beide in ein Package packen und den setter auf default visibility setzen, sonst könnte man von außen böse Dinge anstellen. Ist das die normale Herangehensweise?
Ja, eine Person hat normalerweise Eltern, es geht aber viel eher hierum: Wie willst du eine Person erstellen, wenn du deren Eltern (welche widerum Personen sind) kennen musst? Das ist eine unendlich lange Kette, die du dann irgendwann mit
Nun ja, mindestens beim Observer-Pattern gibt es Seiteneffekte.
Wo (anerkannte Literatur) wird das mit den unerwünschten Seiteneffekten denn erwähnt? Das würde mich nun auch genauer interessieren.