Question en java

Ibravitsh -  
 Ibravitsh -
Bonjour , jai une question qui me parait un peu confuse : le cas où une class A extends class B et class B extends class C, sachant que chacune de ces classes possède une méthode public void affiche() , comment faire pour appeler la fonction affiche() de la classe C à partir d'une méthode de la classe A ?

j'ai pensé a super.super.affiche() ,mais la syntaxe est invalide !!

Class C { 
    public void affiche(){}
}
Class A extends B{
   public void affiche(){}
}
Class B extends C{
    public void affiche(){}
}

Cordialement !

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    De manière directe tu ne peux pas.

    L'objet de la classe A n'a qu'une seule méthode affiche qui est celle de la classe A, celles de B et C sont "perdues" pour l'objet A.

    Tu peux éventuellement faire référence dans A à une méthode de B via le mot clé super, mais ça ne fera référence à la méthode de C que si la méthode de B fait elle même référence à celle de C via un autre mot clé super.

    class C
    { 
        public void affiche()
        {
            System.out.print("C");
        }
    }
    
    class B extends C
    {
        @Override
        public void affiche()
        {
            super.affiche(); // méthode affiche de C
            System.out.print("B");
        }
    }
    
    class A extends B
    {
        @Override
        public void affiche()
        {
            super.affiche(); // méthode affiche de B
            System.out.print("A");
        }
    }
    
    public static void main(String[] args)
    {
        A a = new A();
        a.affiche(); // CBA
    }

    Remarques :
    - Tu ne peux pas passer de A à C sans passer par B.
    - Tu n'es pas obligé de surcharger la méthode affiche dans B et A. Dans ce cas tu conserveras la méthode de C pour les objets de B et A.

    class C
    { 
        public void affiche()
        {
            System.out.print("C");
        }
    }
    
    class B extends C
    {
    }
    
    class A extends B
    {
    }
    
    public static void main(String[] args)
    {
        A a = new A();
        a.affiche(); // C
    }
    La confiance n'exclut pas le contrôle
    0
  2. Ibravitsh
     
    Merci bien KX c tres clair ta reponse !
    0