Java 匿名类

匿名类是什么?

在一个表达式中定义类和实例化,而不指定类名的类称为匿名类。由于不需要指定类名,所以可以实现接口、调用方法、继承类、重写方法和调用方法,非常方便在需要临时使用方法的情况下。

interface Inter{
    void methodA();
}

class SuperT{
    void methodS() {
        System.out.println("Super");
    }
}

class OuterT{ //外側クラス
    void method1() {
        new Inter() { //インターフェースの実装とインスタンス化を同時に行う
            public void methodA() {
                System.out.println("methodA実装");
            }
        }.methodA(); //インスタンス化したものからmethodAを呼び出す
    }

    /*void method2() {
        new SuperT() {
            void methodS() {
                System.out.println("Override");
            }
        }.methodS();
    }*/

}

public class Tokumei {

    public static void main(String[] args) {
        OuterT ot = new OuterT();
        ot.method1();
        //ot.method2();

        System.out.println("-----SuperT型の変数に代入してから呼び出した場合-----");
        SuperT st = new SuperT() { //スーパークラス型の変数に代入
            void methodS() {
                System.out.println("Override");
            }
            void methodSub() { //匿名サブクラス独自メソッド
                System.out.println("Sub");
            }
        };

        st.methodS();
        //st.methodSub(); //スーパークラス型変数では匿名サブクラス独自のメソッドは呼べない

        System.out.println("-----直接オブジェクトから呼び出した場合-----");
        new SuperT() {
            void methodS() {
                System.out.println("Override");
            }
            void methodSub() {
                System.out.println("Sub");
            }
        }.methodSub(); //直接呼ぶことはできる
        }
}

输出结果 (Chū lì

methodA実装
-----SuperT型の変数に代入してから呼び出した場合-----
Override
-----直接オブジェクトから呼び出した場合-----
Sub

在中文中,有以下几种方式来表达:

1. 角度
2. 要点
3. 焦点

当继承一个类时,匿名子类可以重写方法。

当将继承自超类的匿名子类赋值给超类类型的变量后进行调用时,只能调用超类中存在的方法(包括覆写的方法)。原理与常规超类和子类的情况相同,即访问范围由变量类型决定。

如果从直接对象中调用,还可以调用匿名子类中独自设置的方法。

广告
将在 10 秒后关闭
bannerAds