首頁 > 軟體

學生視角帶你瞭解Java內部類

2022-03-04 19:01:13

一、內部類介紹

1.定義:一個類內部又巢狀了一個類,被巢狀的類就是內部類(inner class),巢狀其他類的稱為外部類(outer class)。內部類是類的五大成員之一(屬性、 方法、構造器、程式碼塊、內部類)。

分類:

二、成員內部類:

1、非靜態內部類

說明:定義在成員位置中(方法或程式碼塊外面),無static修飾。

1.可以直接存取外部類的所有的成員

2.可以 新增任意許可權修飾符

3.作用域,和其他成員一樣作用在整個外部類

package local_class;

public class localclass {//外部類
    //屬性位置
    private int n1=10;
    class localN1{//區域性類
        public void output(){
            //==1==.可以直接存取外部類的所有的成員,包括私有
            System.out.println("獲取私有成員"+n1);
        }
    }
    //寫一個方法來建立區域性類的一個實列
    public void output(){
        localN1 LocalN1 = new localN1();
        LocalN1.output();
    }

}

實現:

2、靜態內部類

**說明:**定義在成員位置中(方法或程式碼塊外面),有或無static修飾。

1.可以直接存取外部類的靜態的成員,不能存取非靜態成員。

2.可以 新增任意許可權修飾符

3.作用域,和其他成員一樣作用在整個外部類

程式碼:

package local_class;

public class _static_localclass {//外部類
    private int n1=10;
    static int n2=20;
    static public class localN2{//靜態區域性類
        public void output(){
            //==1==.可以直接存取外部類的所有的成員,包括私有
            System.out.println("獲取_static_localclass私有成員"+n2);
            //System.out.println(n1);
        }
    }
    //寫一個方法來建立區域性類的一個實列
    public void output(){
        localN2 LocalN2 = new localN2();
        LocalN2.output();
    }
}

成員內部類:用法比較簡單。

二、區域性內部類:

說明:區域性類是定義在外部類的方法內或者程式碼塊內。

1.可以直接存取外部類的所有的成員。

2.不能新增存取修飾符,區域性內部類的地位就是一個區域性變數(所以可以用fianl修飾)。

3.作用域:作用在所定義的方法中或者程式碼塊中。

4.存取方式:區域性內部類存取外部外部類成員可以直接存取。外部類存取區域性內部類,在外部類作用域內先建立物件再存取。

5.外部其他類不能存取內部類。

6.外部類成員與內部類成員重名時,預設就近原則,如果想用外部類的話可以使用:外部類名.this.成員 。

例如:

2、有名的區域性內部類

錯誤程式碼

正確程式碼

package _inner_class;

public class Named_local_inner_class {//外部類
    private int a1=1;
    int a2=2;
    private void fun(){
        System.out.println("輸出了私有方法");
    }
    //第一種情況,在方法中
    //第二種情況,在程式碼塊中(我就不打程式碼了和在方法中一樣的)
    //此處以方法中為例。
    public void output(){//方法
    
        class inner_class{//區域性內部類
            //1.可以存取外部類的所有成員
            public void _output(){
                System.out.println("a1="+a1);//存取的私有成員
                System.out.println("a2="+a2);
                fun();
            }

        }
		//只需要範例化就行了,然後呼叫這個 output()方法。
		//注意作用域
        inner_class Inner_class=new inner_class();
        Inner_class._output();
    }//結束方法


}//外部類

呼叫

1、匿名區域性內部類(重要)

1.本質還是一個內部類 就是一個類,該類沒有名字(其實有名字,只是我們看不見,系統分配)。

2.同時還是一個物件。 基本語法

new 類名或介面名(參數列){
類體
};

呼叫匿名內部類:

輸出

和有名的區域性內部類的區分

1.A22物件只使用一次,以後不再使用時用匿名區域性內部類。

2.A22的編譯型別和執行型別是什麼?(執行型別其實就是匿名區域性內部類,就是XXXXX.外部類名$1)

如圖:

最佳實踐:當作引數直接傳遞,簡介高效。

到此這篇關於學生視角帶你瞭解Java內部類的文章就介紹到這了,更多相關Java 內部類內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com