OOP Vererbung

equin

Aktives Mitglied
Hallo,
ich habe ein Verständnisproblem bei der Vererbung. Das Beispiel unten zeigt drei Klassen. Asub erbt von A und übergibt seinen Parameter (Objekt B) an die Superklasse weiter. A ruft die Methode test() im Konstruktor auf welche eine Variable von B ausgibt. Diese Methode wird in Asub überschrieben. Erzeuge ich nun, eine Instanz von Asub, dann wirft die test()-Methode von Asub einen Nullpointer, weil B noch nicht gesetzt wurde (super() wird aufgerufen, bevor B in Asub gesetzt wird).

Warum funktioniert das nicht? Müsste Asub nicht B von A erben? Wo liegt hier das Problem/der Fehler?

Java:
public class A {
	B b;
	public A(B b){
		this.b = b;
		test();
	}
	public void test(){
		System.out.println(b.testVar);
	}
}

public class Asub extends A {
	B b;
	public Asub(B b){
		super(b);
		this.b = b;

	}
	public void test(){
		System.out.println(b.testVar);
	}
	public static void main(String[] args) {
		new Asub(new B());
	}
}
public class B {
	public String testVar = "test";
}

Vielen Dank
equin
 

Ariol

Top Contributor
Java:
public class Asub extends A {

	public Asub(B b) {
		super(b);
	}

	public void test() {
		System.out.println(b.testVar);
	}

	public static void main(String[] args) {
		new Asub(new B());
	}
}
 

Fu3L

Top Contributor
Streich mal in Asub die Deklaration [c]B b;[/c] dann müsste es klappen. Die Instanzvariable b in Asub überdeckt nämlich die in A und daher wird auch in der Testmethode b aus Ausb aufgerufen, weil immer die überschreibende Methode genutzt wird bei Subklassen.
 
S

SlaterB

Gast
du hast es doch schon erkannt:
"super() wird aufgerufen, bevor B in Asub gesetzt wird"
also wird auch test() in Asub ausgeführt, bevor der Konstruktor das Attribut b setzt, dieses ist noch null

was meinst du mit
> Müsste Asub nicht B von A erben?
wenn dem so wäre, was ja im Grunde auch so ist, aber durch das neue B in Asub überschrieben wird,
dann ergeben sich ganz andere Fragen, was wäre denn dein Ziel?
'solange das eigene bessere B null ist, nimm das B von der Superklasse A'? so gehts doch nicht
 

equin

Aktives Mitglied
Sorry für die Bezeichner. Ich dachte so ist es vll am klarsten. Das Beispiel war leider zu sehr vereinfacht. In obigen Fall wär die Lösung ja wirklich, wenn man das B aus Asub rausnimmt.

Mein eigentliches Problem liegt aber darin, dass die Klasse Asub auch eine anderes Objekt als A besitzt, und zwar Bsub (erbt also von B). Und da ich die zusätzlichen Methoden von Bsub in Asub benötige, kann ich nicht einfach B in A weglassen.

Ich hoffe das ist irgendwie verständlich wie ich das meine :)

Java:
package vererbung;

public class A {

	B b;
	public A(B b){
		this.b = b;
		test();
	}
	
	public void test(){
		System.out.println(b.testVar);
	}
	
}


package vererbung;

public class Asub extends A {

	Bsub b;
	
	
	public Asub(Bsub b){
		super(b);
		this.b = b;

	}
	
	public void test(){
		System.out.println(b.testVar);
	}
	
	public static void main(String[] args) {
		new Asub(new Bsub());
	}
}

package vererbung;

public class B {

	public String testVar = "test";
	
}

package vererbung;

public class Bsub extends B {

}
 

Ariol

Top Contributor
Der Aufruf
Code:
test()
im Konstrukor von A ruft die Methode
Code:
test()
in der Klasse Asub auf, da das verwendete Objekt vom Typ Asub ist.
Die Testmethode in Asub greift wiederrum auf
Code:
b
zu, welches immer noch nicht initialisiert ist.

So geht wird es vielleicht klarer:
Java:
package vererbung;
 
public class Asub extends A {
 
    Bsub bsub;
    
    
    public Asub(Bsub b){
        super(b);
        this.bsub = b;
 
    }
    
    public void test(){
        System.out.println(bsub.testVar);
    }
    
    public static void main(String[] args) {
        new Asub(new Bsub());
    }
}

Der Code ist äquivalent zu deinem!

Eine Möglichkeit wäre mit Generics zu arbeiten:
Java:
package vererbung;
 
public class A<BType extends B> {
 
	BType b;
    public A(BType b){
        this.b = b;
        test();
    }
    
    public void test(){
        System.out.println(b.testVar);
    }
    
}


Java:
package vererbung;
 
public class Asub extends A<Bsub> {
    
    
    public Asub(Bsub b){
        super(b);
    }
    
    public void test(){
        System.out.println(b.testVar);
    }
    
    public static void main(String[] args) {
        new Asub(new Bsub());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
G 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
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
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
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben