中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

java 內部類如何訪問成員

小樊
81
2024-11-15 09:41:55
欄目: 編程語言

在 Java 中,內部類(Inner Class)可以訪問其外部類的所有成員,包括私有成員。內部類分為四種類型:成員內部類、局部內部類、匿名內部類和靜態內部類。下面是各種內部類訪問成員的方式:

  1. 成員內部類(Member Inner Class): 成員內部類是定義在外部類內部的普通類。它可以訪問外部類的所有成員,包括私有成員。訪問方式與外部類的成員相同。
public class OuterClass {
    private int outerData = 10;

    class InnerClass {
        void display() {
            System.out.println("outerData: " + outerData);
        }
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.display(); // 輸出:outerData: 10
    }
}
  1. 局部內部類(Local Inner Class): 局部內部類是定義在方法內部或代碼塊內部的類。它只能訪問所在方法或代碼塊中的 final 或 effectively final 的局部變量。
public class OuterClass {
    public void createLocalInnerClass() {
        final int localData = 20;

        class LocalInnerClass {
            void display() {
                System.out.println("localData: " + localData);
            }
        }

        LocalInnerClass localInner = new LocalInnerClass();
        localInner.display(); // 輸出:localData: 20
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.createLocalInnerClass();
    }
}
  1. 匿名內部類(Anonymous Inner Class): 匿名內部類是沒有名字的內部類,通常用于創建一次性使用的對象。它可以訪問所在方法或代碼塊中的 final 或 effectively final 的局部變量。
public class OuterClass {
    public void createAnonymousInnerClass() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Anonymous inner class running.");
            }
        };

        new Thread(runnable).start(); // 輸出:Anonymous inner class running.
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.createAnonymousInnerClass();
    }
}
  1. 靜態內部類(Static Inner Class): 靜態內部類是使用 static 關鍵字定義的內部類。它可以訪問外部類的所有靜態成員,但不能直接訪問外部類的非靜態成員。如果需要訪問非靜態成員,需要通過外部類的實例。
public class OuterClass {
    private static int outerStaticData = 100;
    private int outerData = 200;

    static class StaticInnerClass {
        void displayOuterStaticData() {
            System.out.println("outerStaticData: " + outerStaticData);
        }

        void displayOuterData(OuterClass outer) {
            System.out.println("outerData: " + outer.outerData);
        }
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
        staticInner.displayOuterStaticData(); // 輸出:outerStaticData: 100
        staticInner.displayOuterData(outer); // 輸出:outerData: 200
    }
}

0
淮北市| 德州市| 高台县| 金乡县| 博爱县| 聂拉木县| 泸定县| 松桃| 久治县| 长丰县| 龙江县| 泽普县| 富宁县| 焉耆| 晋城| 扬中市| 松阳县| 孝感市| 泸定县| 昭通市| 平武县| 慈溪市| 门头沟区| 阿克苏市| 横峰县| 乐都县| 休宁县| 珠海市| 英吉沙县| 平湖市| 扶风县| 五大连池市| 宣化县| 饶阳县| 五常市| 四川省| 德令哈市| 石家庄市| 闽清县| 枣强县| 潜山县|