Hallo!
Bin gerade am Tüfteln von einer wahrscheinlich für euch alle sehr einfachen Aufgabe:
Gegeben sind die folgenden beiden Klassen:
public class A {
public void f() { System.out.println(„method f of class A“); }
public void g() { System.out.println(„method g of class A“); }
}
public class B extends A {
public void g() { System.out.println(„method g of class B“); }
public void h() { System.out.println(„method h of class B“); }
}
Sowie die folgenden Variablendeklerationen:
A a = new A();
B b = new B();
A c = new B();
Welche der folgenden Methodenaufrufe sind korrekt und welche Ausgaben erzeugen sie?
a.g(); // Aufruf 1
a.h(); // Aufruf 2
b.f(); // Aufruf 3
b.g(); // Aufruf 4
c.g(); // Aufruf 5
c.h(); // Aufruf 6
Die Lösung lautet:
a.g(); method g of class A
a.h(); -> geht nicht !!! Keine Methode h() in A
b.f(); method f of class A
b.g(); method g of class B
c.g(); method g of class B
c.h(); -> geht nicht!!!! Allgemeinerer Typ wird verwendet => keine Methode h() in A
Ich verstehe nicht, warum die Methoden b.g(); und c.g(); "method g of class B" und nicht "method g of class A" liefern. Kann mir da einer helfen?
Bin gerade am Tüfteln von einer wahrscheinlich für euch alle sehr einfachen Aufgabe:
Gegeben sind die folgenden beiden Klassen:
public class A {
public void f() { System.out.println(„method f of class A“); }
public void g() { System.out.println(„method g of class A“); }
}
public class B extends A {
public void g() { System.out.println(„method g of class B“); }
public void h() { System.out.println(„method h of class B“); }
}
Sowie die folgenden Variablendeklerationen:
A a = new A();
B b = new B();
A c = new B();
Welche der folgenden Methodenaufrufe sind korrekt und welche Ausgaben erzeugen sie?
a.g(); // Aufruf 1
a.h(); // Aufruf 2
b.f(); // Aufruf 3
b.g(); // Aufruf 4
c.g(); // Aufruf 5
c.h(); // Aufruf 6
Die Lösung lautet:
a.g(); method g of class A
a.h(); -> geht nicht !!! Keine Methode h() in A
b.f(); method f of class A
b.g(); method g of class B
c.g(); method g of class B
c.h(); -> geht nicht!!!! Allgemeinerer Typ wird verwendet => keine Methode h() in A
Ich verstehe nicht, warum die Methoden b.g(); und c.g(); "method g of class B" und nicht "method g of class A" liefern. Kann mir da einer helfen?