OVH Cloud OVH Cloud

cast et héritage

2 réponses
Avatar
Quentin
Bonjour !
j'ai un programme de test d''héritage qui me donne un résultat que je ne
comprend pas...
1 2
2 -2
3 B
4 B
5 1
6 -2
7 A
8 A

pourquoi -2 en 6 ??? si quelqu'un pouvait m'expliquer, ce erait tres
gentil...
merci d'avance
quentin

et le programme :


class A

{ int i = 1;

int f() { return i; }

static char g() { return 'A'; }

}

class B extends A

{ int i = 2;

int f() { return –i; }

static char g() { return 'B'; }

}

public class Test

{ public static void main(String args[])

{ B b = new B();

System.out.println(b.i); // 1

System.out.println(b.f()); // 2

System.out.println(b.g()); // 3

System.out.println(B.g()); // 4

A a = (A) b;

System.out.println(a.i); // 5

System.out.println(a.f()); // 6

System.out.println(a.g()); // 7

System.out.println(A.g()); // 8

}}

2 réponses

Avatar
Thomas Cornet
Bien que tu aies casté b en classe A, b reste toujours de classe B à
l'intérieur de la JVM. Quand tu accèdes à une fonction, la JVM va toujours
chercher la fonction la plus profonde dans l'arborescence des classes (ici,
la classe B). Par contre, si tu veux accéder à un attribut de la classe, la
JVM va chercher l'attribut dans la classe courante de l'objet (ici, la
classe A, vu que b est casté en A).



Bonjour !
j'ai un programme de test d''héritage qui me donne un résultat que je ne
comprend pas...
1 2
2 -2
3 B
4 B
5 1
6 -2
7 A
8 A

pourquoi -2 en 6 ??? si quelqu'un pouvait m'expliquer, ce erait tres
gentil...
merci d'avance
quentin

et le programme :


class A

{ int i = 1;

int f() { return i; }

static char g() { return 'A'; }

}

class B extends A

{ int i = 2;

int f() { return –i; }

static char g() { return 'B'; }

}

public class Test

{ public static void main(String args[])

{ B b = new B();

System.out.println(b.i); // 1

System.out.println(b.f()); // 2

System.out.println(b.g()); // 3

System.out.println(B.g()); // 4

A a = (A) b;

System.out.println(a.i); // 5

System.out.println(a.f()); // 6

System.out.println(a.g()); // 7

System.out.println(A.g()); // 8

}}


Avatar
captainpaf
Quentin a exprimé avec précision :
Bonjour !
j'ai un programme de test d''héritage qui me donne un résultat que je ne
comprend pas...
1 2
2 -2
3 B
4 B
5 1
6 -2
7 A
8 A

pourquoi -2 en 6 ??? si quelqu'un pouvait m'expliquer, ce erait tres
gentil...
merci d'avance
quentin

et le programme :


class A

{ int i = 1;

int f() { return i; }

static char g() { return 'A'; }

}

class B extends A

{ int i = 2;

int f() { return -i; }

static char g() { return 'B'; }

}

public class Test

{ public static void main(String args[])

{ B b = new B();

System.out.println(b.i); // 1

System.out.println(b.f()); // 2

System.out.println(b.g()); // 3

System.out.println(B.g()); // 4

A a = (A) b;

System.out.println(a.i); // 5

System.out.println(a.f()); // 6

System.out.println(a.g()); // 7

System.out.println(A.g()); // 8

}}


Salut,

c'est vrai que ce comportement peut paraître déroutant. Tu peux avoir
une explication plus précise de "l'upcasting" içi :
http://penserenjava.free.fr/pens/indexMain_8&0.htm#00.002