Inheritance Flashcards
Aufgabe Inheritance : Was gibt folgendes Program aus?
class A {
public int x;
public A(int a) { this.x = a; } public int getX() { return x; } public int getY() { return this.getX() + 2; } }
class B extends A {
public int x;
public B(int b) { super(b); this.x = 2 * b; } }
class C extends B {
public C(int c) {
super(c);
}
public int getX() { return 18; } }
public class Inheritance {
public static void main(String[] args) {
A aa = new A(10);
A ab = new B(100);
A ac = new C(1000);
System.out.println(aa.getY());
System.out.println(ab.getY());
System.out.println(ac.getY());
B bb = new B(10); B bc = new C(100); System.out.println(bb.getY()); System.out.println(bc.getY()); C cc = new C(10); System.out.println(cc.getY()); } }
12
202
20
22
102
20
Vererbung
Was ist die Ausgabe von der folgenden main-Methode Quizz?
class D {
public String s;
public D() { s= “d”; }
public String foo() { return “D” + s; }
public String bar() { return foo() + s; }
}
class E extends D {
public String s;
public E() { s= “e”; }
public String foo() { return “E” + s; }
}
public class Quizz {
public static void main(String[] args) {
E e = new E();
D d = e;
System.out.println( d.foo() + d.s );
System.out.println( e.foo() + e.s );
System.out.println( d.bar() + d.s );
System.out.println( e.bar() + e.s );
}
Die Ausgabe des Programms ist:
Copy code
DE
Ee
DEd
Eed
Der Ausdruck d.foo() ruft die Methode foo() der Klasse E auf, da d als Instanz von E deklariert wurde und zur Laufzeit das Polymorphismus-Prinzip anwendet wird. Jedoch ist die Referenzvariable d vom Typ D, so dass das Attribut s von der Klasse D verwendet wird, das den Wert “d” enthält.
Der Ausdruck e.foo() ruft auch die Methode foo() der Klasse E auf und gibt “Ee” zurück, da e vom Typ E ist und das Attribut s der Klasse E den Wert “e” hat.
Der Ausdruck d.bar() ruft die Methode bar() der Klasse D auf, da d als Instanz von D deklariert wurde und zur Laufzeit kein Polymorphismus auftritt. Die Methode foo() wird aufgerufen und gibt “Dd” zurück, da s von der Klasse D verwendet wird.
Der Ausdruck e.bar() ruft auch die Methode bar() der Klasse D auf, aber da e vom Typ E ist, wird die Methode foo() der Klasse E aufgerufen, die “Ee” zurückgibt. Dann wird das Attribut s der Klasse D verwendet, das “d” enthält, und die Methode gibt “Eed” zurück.