Javaの学習 - 匿名の内部クラス

/ *
インタフェースの実装クラス(または親サブクラス)の場合のみ、一度だけ使用する必要があります
] [ので、この場合には、クラスの定義を省略し、代わりに匿名内部クラスを使用することができます。

匿名の内部クラス定義されたフォーマット:
インタフェース名インタフェース名=新しいオブジェクト名(){
//抽象カバー書き換えすべてのメソッドを
}。

:「新しいインタフェース名(){...}」の解析のフォーマット

  1. 新代表はオブジェクトのアクションを作成するには
  2. どのインタフェースはインタフェース名の匿名内部クラスを実装する必要があります
  3. {...}これは匿名の内部クラスの内容であります

また、いくつかの点に注意してください。

  1. 匿名の内部クラスは、オブジェクト[]、使用のみだけの時間を作ります。
    あなたがオブジェクトの数倍が、コンテンツの同じ種類を作成したい場合は、で定義された個別の実装クラスを使用する必要があります。
  2. 匿名は、[時間]でメソッドたinvoke、オブジェクトのみだけ時間と呼ぶことができます。
    あなたが同じオブジェクトを使用する場合は、メソッドを複数回呼び出すには、オブジェクトに名前を付ける必要があります。
  3. 匿名内部クラスは、[実装クラス/サブクラス名]を省略しているが、[匿名オブジェクトは、オブジェクトの省略名である]
    強調は:匿名内部クラスと匿名オブジェクトは同じものではありません!
    * /
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");
    }
}
公開された55元の記事 ウォンの賞賛0 ビュー385

おすすめ

転載: blog.csdn.net/qq_44813352/article/details/104365888