/*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
- siposa blogja
 - A hozzászóláshoz be kell jelentkezni
 - 2104 megtekintés
 
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
- A hozzászóláshoz be kell jelentkezni
 
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
- A hozzászóláshoz be kell jelentkezni
 
Ez az output:
a: A
b: null
c: C
Én a "b" esetben nem null-t vártam. A kérdés csak az, hogy ezért mekkora lémernek számítok :)
- A hozzászóláshoz be kell jelentkezni
 
a datB csak akkor kap értéket, ha meghíják a B.init()-et. Viszont ez nem hívódik meg soha. Nem tudom, hogy ezt mekkora lámaság nem észrevenni. Ilyen homogém, ismétlődős kódban nehéz észrevenni kis különbségeket, mint init, meg super.
________
0x2A
- A hozzászóláshoz be kell jelentkezni
 
Nem ilyen egyszerű :) Debugold végig.
Meghívja a B.init()-et, a poén aztán jön :D.
- A hozzászóláshoz be kell jelentkezni
 
Ejha, mire nem jó a felületesség :)
Akkor ezt még megnézem magamnak, aztán visszatérek :)
__________
0x2A
- A hozzászóláshoz be kell jelentkezni
 
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
- A hozzászóláshoz be kell jelentkezni
 
The initializers are executed immediately after the superclass constructor and before the body of the constructor.
Lelkileg készületlenül ért... :)
- A hozzászóláshoz be kell jelentkezni
 
Értem, király :)
Szinte jól sejtettem :) Ezek szerint ha nem írod oda az "=null"-t, akkor tényleg "B" lesz az értéke.
szerk.: megnéztem, tényleg
__________
0x2A
- A hozzászóláshoz be kell jelentkezni
 
A jelenseget ugy hivjak, hogy kovariencia es kontravariencia. Lasd bovebben itt: http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_sc…
- A hozzászóláshoz be kell jelentkezni
 
Huh, ez elsőre elég sűrű. Köszönöm a linket!
- A hozzászóláshoz be kell jelentkezni