1
votes

Accès à la méthode de classe abstraite

J'ai trois classes différentes:

1-)

one
three
two
one
three
three

2-)

public static void main(String [] args){
C c=new C();
c.one();
c.two();
c.three();
}

3- )

public class C extends B {
void three(){
    System.out.println("three");
}

}

dans la méthode Main

abstract class B extends A {
void one() {
    System.out.println("one");
    three();//I think this method has to run
}

void three() {
    System.out.println("3");//That
}
}

Sortie:

abstract class A {
abstract void one();
void two(){
    System.out.println("two");
one();
}
abstract void three();
 }

Mais je pense que dans le deuxième code, la méthode one () doit exécuter ses trois méthodes et elle doit afficher "3" au lieu de "trois" mais ce code en exécute trois en classe C.


0 commentaires

3 Réponses :


1
votes

La méthode three () est remplacée à la fois dans les classes B et C

Puisque c est une instance de la classe C, toute référence à la méthode three () avec un objet c invoquera l'implémentation three () dans la classe C


0 commentaires

1
votes

La méthode trois () est remplacée dans C . Puisque c contient une instance de C , c'est le résultat que vous voyez.


0 commentaires

0
votes

Le remplacement en java fonctionne toujours en fonction de l’objet cible de la référence «c». Donc, tout d'abord, il aura de la chance dans la classe C pour toute version remplacée disponible de la méthode three (), sinon la version de la classe parent suivante sera exécutée.


0 commentaires