1

私は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";

    }
}
4

1 に答える 1