Javaの匿名クラスは、スーパークラス以外のメソッドを持つことができますか?[複製]

Dec 27 2020

匿名クラスはオーバーライドなどに適していることは知っていますが、以下の例のように、親クラスに存在しない他のメソッドを追加することもできるでしょうか。

これは、wieBenIkを唯一のメソッドとする私のクラスです。

public class Driehoek {

//methoden
public void wieBenIk(){
    System.out.println("ik ben een driehoek");
}

}

これが、newMethodを追加した匿名クラスです。

パブリッククラスメイン{

public static void main(String[] args) {

    Driehoek test = new Driehoek(){

        @Override
        public void wieBenIk() {
            System.out.println("overrided by anonymous class");
        }

        public void newMethod(){
            System.out.println("I am a new method");
        }
    };

    test.newMethod();

}

}

私の質問は、なぜtest.newMethod()が機能しないのですか?他のような子クラスではないですか?助けてくれてありがとう。

回答

SJuan76 Dec 27 2020 at 05:44

testDriehoekのインスタンスとして宣言されています。そのため、コンパイラーの場合、Driehoekのメンバーが含まれます。

同様に、あなたが定義する場合

Object test = new Driehoek() {....};

コンパイラテストでは、オブジェクトメンバーのみが使用可能になります。

匿名クラスにさらにメンバーを追加すると、コンパイラーは、テストでそれらのメソッドが使用可能であることを認識しません。だからそれはあなたがそれらを使用することを許可しません