Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
}}
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
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
}}
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
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
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