內部類

N1ce2cu發表於2024-07-13

在這裡插入圖片描述

package org.example;

/**
 * 內部類
 * 1. Java中允許將一個類A宣告在另一個類B中,則類A就是內部類,類B被成為外部類。
 * <p>
 * 2. 內部類的分類:成員內部類(靜態、非靜態)、區域性內部類(方法內、程式碼塊內、構造器內)
 * <p>
 * 3. 成員內部類:
 * 一方面,作為外部類的成員:
 * >呼叫外部類的結構 OuterClass.this.屬性或方法;OutClass.this. 預設省略
 * >可以用static來修飾
 * >可以被四種不同的許可權修飾符修飾
 * <p>
 * 另一方面,作為一個類:
 * >類內可以定義屬性、方法、構造器、程式碼塊、內部類
 * >可以繼承
 * >可以被final修飾
 * >可以被abstract修飾
 * 4.關注如下三個問題
 * 4.1 如何例項化成員內部類的物件
 * 4.2 如何在成員內部類中區分呼叫外部類的結構
 * 4.3 開發中區域性內部類的使用 (略)
 */
public class InnerClassTest {
    //建立Leg例項(靜態成員內部類的建立)
    Person.Leg leg = new Person.Leg();
    //建立Brain例項(非靜態成員內部類的建立)
    //方法1
    Person p = new Person();
    Person.Brain brain = p.new Brain();
    //方法2
    Person.Brain b2 = new Person().new Brain();

}

class Person {

    String name;

    class Brain {
    	//非靜態內部類不可以擁有靜態屬性,靜態方法
        public String name;

        public Brain() {

        }

        public void method3() {
            //呼叫外部類的屬性
            String a = Person.this.name;
            //呼叫外部類的方法
            method();
        }

        class EE {

        }

        {

        }

    }

    static class Leg {

        void method4() {
            //呼叫外部類的靜態方法,不可呼叫外部類的非靜態方法
            method2();

        }

    }

    public void method() {
        //區域性內部類
        class AA {

        }
    }

    public Person() {
        //區域性內部類
        class BB {

        }
    }

    {
        //區域性內部類
        class CC {

        }
    }

    public static void method2() {
        //區域性內部類
        class DD {

        }
    }

    static {
        //區域性內部類
        class EE {

        }
    }
}

相關文章