私はJavaが初めてで、継承の概念を学ぼうとしています。を使用してメインクラスの identifyMyself method() から EggLayer の identifyMyself() メソッドを呼び出そうとしたとき
System.out.println(EggLayer.super.identifyMyself());
期待どおりに動作します。ただし、同じステートメントを使用して、メイン クラスの main method() から EggLayer の identifyMyself() メソッドを呼び出そうとすると、コンパイラは「囲んでいるクラスではありません: EggLayer」というエラーを生成します。
誰かが私になぜこれが当てはまるのか説明してもらえますか?
interface Animal {
default public String identifyMyself() {
return "I am an animal.";
}
}
interface EggLayer extends Animal {
default public String identifyMyself() {
return "I am able to lay eggs.";
}
}
interface FireBreather extends Animal {
@Override
default public String identifyMyself(){
return "I'm a firebreathing animal";
}
}
public class Dragon implements EggLayer, FireBreather {
public static void main (String... args) {
Dragon myApp = new Dragon();
System.out.println(myApp.identifyMyself());
/**
*Not allowed, compiler says "not a enclosing class: EggLayer"
*System.out.println(EggLayer.super.identifyMyself());
*/
}
public String identifyMyself(){
//Call to EggLayer.super.identifyMyself() allowed
System.out.println(EggLayer.super.identifyMyself());
return "im a dragon egglayer firebreather";
}
}