Vererbung bei Klassen mit Objekt der Klasse im Konstruktor

Alice

Mitglied
Hallo liebe Mitglieder,

ich habe hier mein persönliches Henne-Ei Problem und wär euch für alle hilfreichen Beiträge dankbar :)
Ich möchte mit der Klasse Node Eltern-Kind-Beziehungen in einer Baumstruktur ausgeben.
Dafür habe ich die Klasse myNode von Node abgeleitet und um die Methode hasParent() erweitert. In der Main lege ich nun meine Nodes mit ihren Abhängigkeiten an und will sie mir ausgeben lassen. Ich kann allerdings nicht auf hasParent() zugreifen. Ich Versteh auch warum ... ich müsste den Parameter beim Anlegen der Note-Objekte mit myNode anstatt mit Node deklarieren. Aber das dann blubbert ja wieder der Konstruktor von myNote :(

Kann mir jemand sagen was ich im Code ändern muss damit die auskommentierte
Java:
//if(node.hasParent())
Methode aufrufbar wird.
Ach ja - noch was: Ich will unbedingt mit der abgeleiteten Klasse arbeiten und die Basisklasse nicht verändern. Muss doch irgendwie gehen oder?

Hier mein Code
Java:
import java.util.ArrayList;

public class Node {
    private String name;   
    private ArrayList<Node> parents;
   
    public Node(String name, ArrayList<Node> elements){
        this.name = name;       
        this.parents = elements;
    }       
    public String getName(){
        return name;
    }   
    public ArrayList<Node> getParents(){
        return parents;
    }
}

Java:
import java.util.ArrayList;

public class MyNode extends Node{
    public MyNode(String name, ArrayList<Node> elements) {
        super(name, elements);       
    }
    @Override
    public String toString(){
        return String.format("Element.name:[%s]", getName());
    }
    public boolean hasParent(){
        if(getParents() == null) return false;
        else return true;
    }
}
Java:
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
                       
        Node a = new MyNode("A", null);
        Node b = new MyNode("B", new ArrayList<Node>(){{add(a);}});
        Node c = new MyNode("C", new ArrayList<Node>(){{add(a);add(b);}});
        Node d = new MyNode("D", new ArrayList<Node>(){{add(a);add(c);}});
       
        ArrayList<Node> allNotes = new ArrayList<Node>();
        //allNotes.add(a);
        allNotes.add(b);
        allNotes.add(c);
        allNotes.add(d);       
       
               
        for(Node node : allNotes){
            System.out.println(node);       
            //if(node.hasParent()) {
                for(Node parent : node.getParents()){
                    System.out.println("  parent of" + node + " is "+parent);
                }   
            //}
        }       
    }
}


Und hier die Ausgabe:

Code:
Element.name:[B]
  parent ofElement.name:[B] is Element.name:[A]
Element.name:[C]
  parent ofElement.name:[C] is Element.name:[A]
  parent ofElement.name:[C] is Element.name:[B]
Element.name:[D]
  parent ofElement.name:[D] is Element.name:[A]
  parent ofElement.name:[D] is Element.name:[C]


Vielen Dank euch schonmal
 

mrBrown

Super-Moderator
Mitarbeiter
Das geht nur, wenn die castest oder deine Liste als List<MyNode> deklarierst.

Du kannst dir aber das if sparen, wenn du parents immer initialisierst und null vermeidest, die übergebenen parents fügst du dann einfach hinzu. Wenn keine übergeben werden ist die Liste einfach leer ;)
 

Alice

Mitglied
So?
Java:
MyNode b = new MyNode("B", new ArrayList<MyNode>(){{add(a);}});

Das hab ich auch versucht aber da bekam ich ja auch immer eine Meckermeldung dass der Konstruktor von MyNode beim Parameter nur Node und nicht MyNode verwenden darf. Casten lässt lasst er sich auch nicht.

Ja - Ich sehe schon dass man die die hasParent() auch umgehen kann. Aber ich will ja das Grundproblem verstehen. In den Lehrbüchern finde ich kein Beispiel einer Ableitung von Klassen die sich selbst verwenden.

Kann man hier evt. gar nicht mit abgeleiteten Klassen arbeiten? Oder gibt es bei casten etwas zu beachten?

Danke Dir
 

Alice

Mitglied
Ah juhu @mrBrown du bist ein Genie ... gelöst ... aber noch nicht so recht kapiert warum casten nur dort möglich ist ...
So geht es ...
Java:
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
                       
        Node a = new MyNode("A", null);
        Node b = new MyNode("B", new ArrayList<Node>(){{add(a);}});
        Node c = new MyNode("C", new ArrayList<Node>(){{add(a);add(b);}});
        Node d = new MyNode("D", new ArrayList<Node>(){{add(a);add(c);}});
       
        ArrayList<MyNode> allNotes = new ArrayList<MyNode>();
        allNotes.add((MyNode)a);
        allNotes.add((MyNode)b);
        allNotes.add((MyNode)c);
        allNotes.add((MyNode)d);       
       
               
        for(MyNode node : allNotes){
            System.out.println(node);       
            if(node.hasParent()) {
                for(Node parent : node.getParents()){
                    System.out.println("  parent of" + node + " is "+parent);
                }   
            }
        }       
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Klassen/Methoden/Objekt/Vererbung Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
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
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Vererbung Hilfe zu Klassen / Vererbung Java Basics - Anfänger-Themen 12
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
J Klassen, Unterklassen, Vererbung - Compilerfehler Java Basics - Anfänger-Themen 11
Y Klassen, Vererbung, Konstruktoren Java Basics - Anfänger-Themen 13
T Vererbung und Zugriff auf Methoden von abgeleiteten Klassen Java Basics - Anfänger-Themen 2
L Vererbung - Wie Objekte verschiedener Klassen unterscheiden Java Basics - Anfänger-Themen 3
maddin86 Klassen und Vererbung Java Basics - Anfänger-Themen 15
berliner Klassen Vererbung und Zugriff auf innere private Variable Java Basics - Anfänger-Themen 22
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
N Klassen Vererbung aus KlassenBibliothek (jar) Java Basics - Anfänger-Themen 3
C Klassen/Vererbung/Exception Java Basics - Anfänger-Themen 2
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
L Klassen, Vererbung und Konstruktoren Java Basics - Anfänger-Themen 10
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
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
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
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
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
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

Ähnliche Java Themen

Neue Themen


Oben