匿名内部クラス - のgetClass()

coolchock:

私は、次のコードを書かれています:

public class AnonymousClasses {

    public void sayHello(){

    }


public interface GreetingModule {
    public void sayHello();
}

public static void main(String[] args) {
    AnonymousClasses jonny = new AnonymousClasses(){
        @Override
        public void sayHello() {
            System.out.println("Hey");
        }
    };
    AnonymousClasses john = new AnonymousClasses(){
        @Override
        public void sayHello() {
            System.out.println("Hi");
        }
    };


    GreetingModule greeting = new GreetingModule() {

        @Override
        public void sayHello() {
            System.out.println("Hello");
        }


    };

    jonny.sayHello();
    john.sayHello();
    greeting.sayHello();

    System.out.println(jonny.getClass());
    System.out.println(john.getClass());
    System.out.println(greeting.getClass());

}

出力はもちろんです。

ねえ

こんにちは

こんにちは

クラスAnonymousClasses $ 1

クラスAnonymousClasses $ 2

クラスAnonymousClasses $ 3

しかし、次のように私は私のコードを編集します。

public class AnonymousClasses {

    private final GreetingModule greetingModule;

    public AnonymousClasses(GreetingModule greetingModule) {

        this.greetingModule = greetingModule;
    }

    public void saySomething() {
        greetingModule.sayHello();
    }


public interface GreetingModule {
    public void sayHello();
}

public static void main(String[] args) {
    AnonymousClasses jonny = new AnonymousClasses(new GreetingModule(){
        @Override
        public void sayHello() {
            System.out.println("Hey");
        }
    });
    AnonymousClasses john = new AnonymousClasses(new GreetingModule(){
        @Override
        public void sayHello() {
            System.out.println("Hi");
        }
    });


    GreetingModule greeting = new GreetingModule() {

        @Override
        public void sayHello() {
            System.out.println("Hello");
        }


    };

    jonny.saySomething();
    john.saySomething();
    greeting.sayHello();

    System.out.println(jonny.getClass());
    System.out.println(john.getClass());
    System.out.println(greeting.getClass());

}

出力は次のようになります。

ねえ

こんにちは

こんにちは

クラスAnonymousClasses

クラスAnonymousClasses

クラスAnonymousClasses $ 3

誰かが私を説明することができ、なぜ内部クラスの名前は、最初の2つのgetClass()メソッドでdolarではありませんか?それはまだ内部クラスですか?

マルコスヴァスコンセロス:

あなたは第二の試料上のクラスのインスタンスを作成しています。

AnonymousClasses jonny = new AnonymousClasses(new GreetingModule(){
    @Override
    public void sayHello() {
        System.out.println("Hey");
    }
});

それは希望の匿名のサブクラスを作成するには:

AnonymousClasses jonny = new AnonymousClasses(new GreetingModule(){
    @Override
    public void sayHello() {
        System.out.println("Hey");
    }
}) {
      // Overriding anything here is optional
};

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=313953&siteId=1