Vererbung in zwei Richtungen?

ffghts

Mitglied
Hallo, ich bin neu hier im Forum und habe folgende Frage an euch:

Wir haben in der Schule eine Aufgabe bekommen, dass wir eine Person modellieren sollen. Das habe ich gemacht, indem ich eine Person Klasse erstellt habe, mit diversen Attributen. Die nächste Aufgabe ist dann, dass eine Person verschiedene Verwandtschaftsbeziehungen hat. Nun soll ich eine Einfügelogik erstellen, die automatisch die Beziehung vom Elternteil zum Kind und vom Kind zum Elternteil erstellt.
Ich dachte, dass ich das mit einer Eltern Klasse und einer Kinder Klasse realisiere, die beide von der Klasse Person erben, aber irgendwie habe ich mich da festgefahren und komme einfach nicht weiter.
Hoffe, dass vielleicht jemand einen Tipp für mich hat.

Grüße
 

ffghts

Mitglied
Das ist meine Person Klasse.
Das Datum und die Adresse werden über Assoziation aus zwei anderen Klassen geholt.

Java:
public class Person {

    private int personalNummer;
    private String anrede;
    private String name;
    private String vorname;

    private Datum todesdatum = null;
    private Datum geburtsdatum = null;
    private Adresse adresse = null;

    public int getPersonalNummer() {
        return personalNummer;
    }

    public void setPersonalNummer(int personalNummer) {
        this.personalNummer = personalNummer;
    }

    public String getAnrede() {
        return anrede;
    }

    public void setAnrede(String anrede) {
        this.anrede = anrede;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public void setTodesdatum(Datum todesdatum) {
        this.todesdatum = todesdatum;
    }

    public Datum getTodesdatum() {
        return this.todesdatum;
    }

    public void setGeburtsdatum(Datum geburtsdatum) {
        this.geburtsdatum = geburtsdatum;
    }

    public Datum getGeburtsdatum() {
        return geburtsdatum;
    }

    public void setAdresse(final Adresse adresse) {
        this.adresse = adresse;
    }

    public Adresse getAdresse() {
        return adresse;
    }

    public Person(int personalNummer, String anrede,String vorname, String name) {
        this.setPersonalNummer(personalNummer);
        this.setAnrede(anrede);
        this.setVorname(vorname);
        this.setName(name);
    }

    public String printAll() {
        String person = "Perosnalnummer: " + String.valueOf(personalNummer) + "\n" +
                        "Anrede: " + anrede + "\n" +
                        "Vorname: " + vorname + "\n" +
                        "Nachname: " + name + "\n" +
                        "Adresse: " + adresse + "\n" +
                        "Geburtsdatum: " + geburtsdatum + "\n" +
                        "Todesdatum: " + todesdatum + "\n";
        return person;
    }
}

Nun habe ich eine Eltern Klasse erstellt, die folgendes beinhaltet:

Java:
public class Eltern extends Person {

    public Eltern(int personalNummer, String anrede, String vorname, String name) {
        super(personalNummer, anrede, vorname, name);
    }

    public void elternTeilVon() {

    }
}

Mein Problem ist, dass ich nicht genau weiss, wie ich eine Einfügelogik erstelle, die automatisch die Verwandtschaftsbeziehung erstellt. Wenn ich eine neue Person erstelle und die eine Tochter hat, die aber im meinem Programm gar nicht existiert, wie kann ich dann automatisch eine Beziehung erstellen?

Grüße
 

Jardcore

Top Contributor
Falls du an die Stelle kommst in der du möchtest das ein Kind von Mutter und Vater erbt... das ist in Java nicht möglich. Mehrfachvererbung wird nicht unterstützt.
Folgende Vererbung ist rein Programmiertechnisch.
Kind extends Eltern
Eltern extends Person

Folgendes Beispiel zeigt eine Modellierung die eher an dein Beispiel dran ist. Die Frage ist aber wie genau ist die Aufgabe gestellt? :)
Java:
public class Mutter extends Person {
    @Override
    public void addKind(Person kind) {
        super.addKind(kind);
        kind.setMutter(this);
    }
}
Java:
public class Vater extends Person {
    @Override
    public void addKind(Person kind) {
        super.addKind(kind);
        kind.setVater(this);
    }
}

Java:
public class Person {
    private Vater vater;
    private Mutter mutter;
    private List<Person> kinder;

    public Person(Vater vater, Mutter mutter) {
        this.vater = vater;
        this.mutter = mutter;
        kinder = new ArrayList<>();
    }

    public void addKind(Person kind) {
        kinder.add(kind);
    }
    // setter, getter
}
 
Zuletzt bearbeitet:

ffghts

Mitglied
Danke für deine Antwort Jardcore,

da in Java die Mehrfachvererbung nicht möglich ist, habe ich versucht, es neutral zu halten. Indem ich statt Mutter, oder Vater einfach nur Elternteil sage.
Da meine Beschreibung vielleicht Verwirrung stiftet, hier die genaue Aufgabenstellung:

Eine Person hat div. Verwandschaftsverhältnisse.
1. Bilden sie die Verwandschaft an der Person ab. Bedenken sie, dass die
Verwandschaftsbeziehungen in beide Richtungen darzustellen sind (z.B.
von der Mutter zu Tochter UND von der Tochter zur Mutter).
2. Erstellen sie eine entsprechende Einfügelogik, um die Verknüpfungen
automatisch in beide Richtungen zu erstellen.

Grüße
 

Jardcore

Top Contributor
Hab mein Beispiel noch etwas erweitert. Schau mal ob deine Logik jetzt abgebildet wird.
Ich bin dabei davon ausgegangen das eine Person immer Mutter und Vater hat und eine Person kann eine noch nicht definierte Anzahl von Kindern haben (Liste).
 

Tobse

Top Contributor
Ich denke hier ist so etwas gemeint:

Java:
class Person {
  // ...
  private Person mutter;
  private Person vater;
  private List<Person> kinder;

  public void addKind(Person kind) {
     kinder.add(kind);
     if (geschlecht == MAENNLICH) {
        kind.setVater(this);
     } else {
        kind.setMutter(this);
     }
  }

  public void setMutter(Person mutter) { this.mutter = mutter; }
  public void setVater(Person vater) { this.vater= vater; }
}

P.S.: und kommt mir hier blos nicht mit gender-korrekten varianten hiervon...
 

Jardcore

Top Contributor
Um dich gänzlich zu verwirren hier noch mit Interface :)
Java:
public interface KannKinderHaben {
    public void addKind(Person kind);
}
Java:
public class Mutter extends Person implements KannKinderHaben {
    @Override
    public void addKind(Person kind) {
        kinder.add(kind);
        kind.setMutter(this);
    }
}
Java:
public class Vater extends Person implements KannKinderHaben {
    @Override
    public void addKind(Person kind) {
        kinder.add(kind);
        kind.setVater(this);
    }
}

Java:
public class Person {
    protected Vater vater;
    protected Mutter mutter;
    protected List<Person> kinder;

    public Person(Vater vater, Mutter mutter) {
        this.vater = vater;
        this.mutter = mutter;
        kinder = new ArrayList<>();
    }
    // setter, getter
}

Finde man könnte Kind noch besser modellieren :) Aber für den Anfang reichts erstmal ^^
 

ffghts

Mitglied
Interfaces dürfen wir noch nicht verwenden, aber trotzdem danke. :)
Ich denke ich werde mit euren Ansätzen erstmal weiter kommen, wenn nicht, melde ich mich nochmal. :D
Vielen dank euch beiden.

Grüße
 

mrBrown

Super-Moderator
Mitarbeiter
Java:
public class Mutter extends Person implements KannKinderHaben {
    @Override
    public void addKind(Person kind) {
        kinder.add(kind);
        kind.setMutter(this);
    }
}

Man kann kind.setX(this) weglassen, das ist ja dadurch schon gesetzt:

Java:
public class Person {
    protected Vater vater;
    protected Mutter mutter;
    protected List<Person> kinder;

    public Person(Vater vater, Mutter mutter) {
        this.vater = vater;
        this.mutter = mutter;
        kinder = new ArrayList<>();
    }
    // setter, getter
}

Finde man könnte Kind noch besser modellieren :) Aber für den Anfang reichts erstmal ^^

Und dann muss man hier im Konstruktor nur noch addKind aufrufen. Dann sieht man die Codeduplizierung und lässt Mutter und Vater als zusätzliche Klassen noch weg :p
 

Jardcore

Top Contributor
Stimmt du hast recht. Das würde dann einfach so aussehen.
Java:
public class Person {
   private Person vater;
   private Person mutter;
   private List<Person> kinder;

   public Person(Person vater, Person mutter){
       this.vater = vater;
       this.mutter = mutter;
       this.vater.addKind(this);
       this.mutter.addKind(this);
       kinder = new ArrayList<>();
   }

   public void addKind(Person kind){
        kinder.add(kind);
   }
}

Java:
public class BiblischeGeschichte {
    public static void main(String[] args) {
        Person adam = new Person(null, null);
        Person eva = new Person(null, null);
        Person kain = new Person(adam, eva);
        Person abel = new Person(adam, eva);
        Person set = new Person(adam, eva);

        Person gott = new Person(null, null);
        gott.addKind(adam);
        gott.addKind(eva);
        // jetzt hat Gott zwar Kinder aber die Kinder keine Eltern... traurig

        kain.werfeSteinAuf(abel);
    }
}
 
Zuletzt bearbeitet:

Jardcore

Top Contributor
Java:
public class Person {
   private Person vater;
   private Person mutter;
   private List<Person> kinder = new ArrayList<>();

   public Person(Person vater, Person mutter){
       this.vater = vater;
       this.mutter = mutter;

       if(vater != null) {
           this.vater.addKind(this);
       }
     
       if(mutter != null) {
           this.mutter.addKind(this);
       }
   }

   public void addKind(Person kind) {
       if(kind != null) {
           kinder.add(kind);
       }
   }
}

so :p jetzt siehts aber nicht mehr so schön aus ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben