[Java] Erreur d'appel de méthode lorsque l'héritage et l'implémentation de l'interface sont effectués en même temps

Un rappel sur les erreurs survenues pendant la formation Java.

Erreurs de code et de compilation

Sample.java


abstract class A{
    abstract void aMethod();
} 

interface B{
    void bMethod();
}

//Un héritage
class OnlyA extends A{
    public void aMethod(){};
}

//Un héritage / implémentation B
class AB extends A implements B{
    public void aMethod(){};
    
    public void bMethod(){};
}

public class Main {
    public static void main(String[] args){
        A[] a = new A[]{new OnlyA(), new AB()};

        //Appel de méthode de classe abstraite
        a[0].aMethod();
        a[1].aMethod();

        //Appel de méthode d'interface
        a[1].bMethod();
    }
}

/*
Main.java:26: error: cannot find symbol
        a[1].bMethod();
            ^
  symbol:   method bMethod()
  location: class A
*/

Impossible d'appeler.

Solution

Main.java


public class Main {
    public static void main(String[] args){
        A var1  = new AB();
        B var2  = new AB();
        AB var3 = new AB();
        
        var1.bMethod(); //Ce n'est pas bien
        var2.bMethod(); //C'est d'accord
        var3.bMethod(); //C'est aussi bien
    }
}

Dans ce cas, il semble que vous deviez le déclarer comme un type d'interface ou un type qui l'implémente.

Je pensais accéder à la méthode de l'instance la classe AB étend A implémente B directement, mais comme je l'ai déclarée avec classe A, je me demande si j'y accède en premier?

Dans le cas de l'héritage uniquement / de l'implémentation uniquement, le parent et l'enfant sont définis, il est donc peu probable que «Impossible de trouver le symbole» apparaisse, mais si vous héritez et implémentez en même temps comme ça, vous devez faire attention. (Je n'ai pas tellement utilisé l'interface, mais maintenant c'est hors de question)

J'ai senti que j'avais besoin de plus d'études.

Recommended Posts

[Java] Erreur d'appel de méthode lorsque l'héritage et l'implémentation de l'interface sont effectués en même temps
Méthode de mise en œuvre consistant à lier plusieurs images à un article et à publier en même temps
[ev3 × Java] Interface, implémentation et héritage (traitement événementiel)
Comportement remarqué lors de l'ajout de RadioButton et de la vérification initiale en même temps dans le code
Appelez la super méthode en Java
[Spring Boot] Publiez des fichiers et d'autres données en même temps [Axios]
Dessinez un graphique à barres et un graphique linéaire en même temps avec MPAndroidChart
Test unitaire Java Jugement le même jour ArDate, Date, Calendar, longtemps ignorer l'heure et juger si elles sont le même jour
[Ruby] Définissez la hiérarchie en même temps que l'initialisation de Hash avec la méthode tap
Comparaison Java et Swift (3) Implémentation de classe / héritage de classe / conception de classe
Comment supprimer le tweet associé à l'utilisateur lorsque vous le supprimez en même temps
[Spring Boot] Tableau / liste de fichiers POST et autres données en même temps [Axios]
Méthode de construction de l'environnement et dépanneur au moment du développement conjoint (rails, docker et github)
[Java] [javaSliver] L'interface et les classes abstraites sont compliquées, je vais donc les résumer.