[Java] Fehler beim Methodenaufruf, wenn Vererbung und Schnittstellenimplementierung gleichzeitig ausgeführt werden

Eine Erinnerung an die Fehler, die während des Java-Trainings aufgetreten sind.

Code- und Kompilierungsfehler

Sample.java


abstract class A{
    abstract void aMethod();
} 

interface B{
    void bMethod();
}

//Eine Erbschaft
class OnlyA extends A{
    public void aMethod(){};
}

//Eine Vererbung / B-Implementierung
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()};

        //Methodenaufruf für abstrakte Klassen
        a[0].aMethod();
        a[1].aMethod();

        //Aufruf der Schnittstellenmethode
        a[1].bMethod();
    }
}

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

Konnte nicht anrufen.

Lösung

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(); //Das ist nicht gut
        var2.bMethod(); //Das ist okay
        var3.bMethod(); //Das ist auch okay
    }
}

In diesem Fall müssen Sie es anscheinend als Schnittstellentyp oder als Typ deklarieren, der es implementiert.

Ich dachte, ich würde direkt auf die Methode der Instanz "Klasse AB erweitert A implementiert B" zugreifen, aber da ich sie mit "Klasse A" deklariert habe, frage ich mich, ob ich zuerst darauf zugreife.

Im Fall von Nur Vererbung / Nur Implementierung werden sowohl Eltern als auch Kind definiert, sodass es unwahrscheinlich ist, dass "Symbol nicht finden" angezeigt wird. Wenn Sie jedoch gleichzeitig so erben und implementieren, müssen Sie vorsichtig sein. (Ich habe die Schnittstelle nicht so oft benutzt, aber jetzt kommt es nicht mehr in Frage)

Ich hatte das Gefühl, dass ich mehr lernen musste.

Recommended Posts

[Java] Fehler beim Methodenaufruf, wenn Vererbung und Schnittstellenimplementierung gleichzeitig ausgeführt werden
Implementierungsmethode zum Verknüpfen mehrerer Bilder mit einem Beitrag und zum gleichzeitigen Posten
[ev3 × Java] Schnittstelle, Implementierung und Vererbung (Ereignisverarbeitung)
Verhalten beim gleichzeitigen Hinzufügen von RadioButton und Erstprüfung im Code festgestellt
Rufen Sie die Super-Methode in Java auf
[Spring Boot] Poste Dateien und andere Daten gleichzeitig [Axios]
Zeichnen Sie mit MPAndroidChart gleichzeitig Balkendiagramm und Liniendiagramm
Java-Unit-Test Beurteilung am selben Tag ArDate, Datum, Kalender, lange ignorieren die Zeit und beurteilen, ob sie am selben Tag sind
[Ruby] Definieren Sie die Hierarchie gleichzeitig mit der Initialisierung von Hash mit der Tap-Methode
Java- und Swift-Vergleich (3) Klassenimplementierung / Klassenvererbung / Klassendesign
So löschen Sie den dem Benutzer zugeordneten Tweet, wenn Sie ihn gleichzeitig löschen
[Spring Boot] POST-Datei-Array / Liste und andere Daten gleichzeitig [Axios]
Umweltbauweise und Fehlerbehebung zum Zeitpunkt der gemeinsamen Entwicklung (Schienen, Docker und Github)
[Java] [javaSliver] Die Schnittstelle und die abstrakten Klassen sind kompliziert, daher werde ich sie zusammenfassen.