Eine Erinnerung an die Fehler, die während des Java-Trainings aufgetreten sind.
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.
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