Un rappel sur les erreurs survenues pendant la formation Java.
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.
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