/*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