/ *
インタフェースの実装クラス(または親サブクラス)の場合のみ、一度だけ使用する必要があります
] [ので、この場合には、クラスの定義を省略し、代わりに匿名内部クラスを使用することができます。
匿名の内部クラス定義されたフォーマット:
インタフェース名インタフェース名=新しいオブジェクト名(){
//抽象カバー書き換えすべてのメソッドを
}。
:「新しいインタフェース名(){...}」の解析のフォーマット
- 新代表はオブジェクトのアクションを作成するには
- どのインタフェースはインタフェース名の匿名内部クラスを実装する必要があります
- {...}これは匿名の内部クラスの内容であります
また、いくつかの点に注意してください。
- 匿名の内部クラスは、オブジェクト[]、使用のみだけの時間を作ります。
あなたがオブジェクトの数倍が、コンテンツの同じ種類を作成したい場合は、で定義された個別の実装クラスを使用する必要があります。 - 匿名は、[時間]でメソッドたinvoke、オブジェクトのみだけ時間と呼ぶことができます。
あなたが同じオブジェクトを使用する場合は、メソッドを複数回呼び出すには、オブジェクトに名前を付ける必要があります。 - 匿名内部クラスは、[実装クラス/サブクラス名]を省略しているが、[匿名オブジェクトは、オブジェクトの省略名である]
強調は:匿名内部クラスと匿名オブジェクトは同じものではありません!!!
* /
public class DemoMain {
public static void main(String[] args) {
// MyInterface obj = new MyInterfaceImpl();
// obj.method();
// MyInterface some = new MyInterface(); // 错误写法!
// 使用匿名内部类,但不是匿名对象,对象名称就叫objA
MyInterface objA = new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!111-A");
}
@Override
public void method2() {
System.out.println("匿名内部类实现了方法!222-A");
}
};
objA.method1();
objA.method2();
System.out.println("=================");
// 使用了匿名内部类,而且省略了对象名称,也是匿名对象
new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!111-B");
}
@Override
public void method2() {
System.out.println("匿名内部类实现了方法!222-B");
}
}.method1();
// 因为匿名对象无法调用第二次方法,所以需要再创建一个匿名内部类的匿名对象
new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!111-B");
}
@Override
public void method2() {
System.out.println("匿名内部类实现了方法!222-B");
}
}.method2();
}
}
public interface MyInterface {
void method1(); // 抽象方法
void method2();
}
public class MyInterfaceImpl implements MyInterface {
@Override
public void method1() {
System.out.println("实现类覆盖重写了方法!111");
}
@Override
public void method2() {
System.out.println("实现类覆盖重写了方法!222");
}
}