Java fejtörő

Miután egy trükkös Java feature-t sikerült hibává konvertálnom, és ezzel két munkatársamnak kb. 3 óra felesleges munkát generálnom, felteszek ide egy rövid feladatot. A kérdés: mi lesz az output (fejben futtatva, természetesen)?


/*A.java*/
package oops;

public class A  {
	public String datA = null;

	public A() {
		init();
	}	
	void init() {
		datA = "A";
	}	
	public String toString() {
		return datA;	
	}
}

/*B.java*/
package oops;

public class B extends A  {
	public String datB = null;
	public B() {
		super();
	}
	void init() {
		datB = "B";
	}
	public String toString() {
		return datB;
	}
}
/*C.java*/
package oops;

public class C extends B  {
	public String datC = null;

	public C() {
		init();
	}
	void init() {
		datC = "C";
	}
	public String toString() {
		return datC;
	}	
}
/*test.java*/
package oops;

public class test  {
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		C c = new C();		
		System.out.println("a: "+a);
		System.out.println("b: "+b);
		System.out.println("c: "+c);
	}
}

Tanulság: RTFM

Hozzászólások

Ezért (is) szeretem a Javát. :)
Van 3 osztály, 2 öröklődés, és ennek ellenére az is átlátja, aki nem vett részt a megtervezésében :D :D
szerk.: pardon, 2 kiterjesztés

Izé, nem teljesen értem, hogy mi ezzel a baj. Átolvastam, értelmeztem, aztán lefordítottam, és azt írta ki, amit én is gondoltam. Semmi különlegeset nem érzek itt. (vagy csak nem értem, mi van :)
__________
0x2A

Ez tényleg meghívódik :)
De nem teljesen értem, mi történik. Valami olyasmi, hogy B létrehozásánál először az A konstruktora fut le (ezt tudtam, de már semmiben nem vagyok biztos :), az meg hívná az init()-et, de azt meg B felzabálta, ezért az övét hívja. Utána meg jön B konstruktora, ami meg mindezt tönkreteszi. Tényleg nem is olyan láma dolog :)
__________
0x2A