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
};