le typage en java et la recherche de la méthode en cas d'une redéfinition
bonsoir à tous,
dans le cas d'un héritage avec une redéfinition des méthodes comment est ce que java cherche la bonne méthode ? moi j'ai rien pigé!et c'est la raison derrière les questions suivantes :
soit A la classe mère de B :
question 1 : dans l'instruction A a = new B(); est ce cela veut dire qu'on ne crée dans a que la partie de B qui n'existe pas en A ?!
question 2 : A a = (B) b ;
c'est quoi la différence entre cette écriture et celle-ci :
Code:
1 2 3 4
|
A a = new A();
B b = new B();
a=b; |
dans le cours le prof a écris que A a = (B) b n'est correcte que si la classe B est une sous-classe de A,(je comprends ça) mais il a ajouté que ( le type déclaré de b est une superclasse de B ) il est où le type déclaré de b dans l'instruction A a = (B) b ? (mes questions sont stupides? desolé mais je viens de commencer le cours)
3 ème question : recherche de la méthode à exécuter :
soit le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class A{
void m(A a){
System.out.println("m de A");
}
void n(A a){
System.out.println("n de A");
}
}
class B extends A{
void m(A a){
System.out.println("m de B");
}
void n(B b){
System.out.println("n de B");
}
public static void main(String[] argv){
A a = new B();
B b = new B();
a.m(b);
a.n(b);
}
} |
qu'est ce qu'affichera l'exécution de la méthode main de B ?
Réponse:
m de B
n de A
pourquoi ce choix de méthodes ?