內部類
一、內部類訪問外部類的成員
類的組成:方法,構造器,成員變數,初始化塊(**塊),內部類(也看成是類中一員)
1、外部類能夠訪問內部類的私有成員變數
2、內部類也可以訪問外部類的私有方法、私有成員變數
變數訪問的順序
1、區域性變數優先,本類中的成員變數,外部類的成員變數;
2、內部類中的方法要訪問內部類的成員變數,用 this.+成員變數名 來訪問;
3、內部類中的方法要訪問外問類的成員變數,用 外部類的類名.+this.+
成員變數名 來訪問;
4、外部類不能直接訪問內部類成員變數名,除非外部類new乙個內部類物件去訪問內部類的成員變數。
為什麼內部類可以直接使用外部類的成員變數(前提是內部類中沒有同名成員變數)?
1、成員變數是跟著物件走的,有物件才有成員變數;
2、能呼叫內部類的普通方法,一定有乙個有內部類物件存在;
3、如果有乙個內部類物件存在,則一定有個外部類物件存在;
以上這些適用於普通內部類和區域性內部類,不適和於靜態內部類。
綜上所述,可以表明,有乙個內部類物件存在,則一定會有乙個外部類物件存在,所以,在內部類普通方法中,能夠直接訪問外部類的成員變數。(內部類物件隱式地儲存了指向建立他的外部類物件的箭頭/引用/指標)
但相反,有外部類物件存在,不代表有內部類物件存在,所以外部類不能直接使用內部類的成員變數。
靜態規則:
1、不允許在外部類的靜態方法中使用內部類;
2、內部類不要沾染上和「靜態static」關鍵字有關的內容,否則就會報錯。
二、內部類的種類
1、普通內部類:類中定義的另乙個類。外部類訪問普通內部類看起來和訪問乙個普通類區別並不太大。
2、區域性內部類:外部方法中定義乙個內部類。作用域侷限在定義他的方法中,無法在外部類的其他方法中使用。感覺用處相對比較小。在任何乙個作用域內都可以嵌入乙個區域性內部類。例如在if語句啥的內部可以嵌入內部類。
3、靜態內部類:用static修飾的內部類就是靜態內部類。
靜態,跟著類走的,跟物件沒有關係; 一旦定義了乙個靜態內部類,那麼該類就屬於外部類的組成部份了(跟外部類物件沒有什麼關係)
基本上,什麼成員都可以往靜態內部類裡面放。
靜態內部類和外部類之間訪問資料的時候,把握一些原則:
1、內部類的靜態方法中不要去訪問那些非靜態的成員變數。
2、靜態內部類中的普通方法也不要去訪問外部類的普通方法,只能訪問外部類的靜態方法。
靜態內部類和外部類之間的一些呼叫關係:
1、外部類借助靜態內部類的類名;
2、外部類借助靜態內部類對像;
三、介面的內部類
在介面中,是可以在乙個內部類中定義乙個靜態成員變數,為什麼?
因為在介面中,會自動為內部類使用static修飾,也就是說,介面**現的內部類,都會是靜態內部類。
Java學習筆記之內部類
類的第五個成員 內部類 innerclass 相當於說,我們可以在類的內部再定義類。外面的類,外部類。裡面定義的類 內部類。內部類的分類 成員內部類 宣告在類內部且方法外面 vs 區域性內部類 宣告在類的方法裡 成員內部類 區域性內部類 關於內部類需要掌握的知識 如何建立內部類物件 如何區分呼叫外部...
java學習筆記之內部類
內部類的作用 內部類提供了更好的封裝,只能讓外部類直接訪問,不允許同乙個包中的其他類直接訪問。內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員,但外部類不能訪問內部類的內部屬性。內部類的使用場合 由於內部類提供了封號的封裝特性,並且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所...
java學習筆記之內部類
內部類 乙個類定義在乙個類的內部 a類要直接訪問b類中的成員時,可以將a類定義到b類中,作為b類的內部類存在 訪問規則 內部類可以直接訪問外部類中的成員 外部類要訪問內部類只能建立內部類的物件 內部類有所屬,生成的class檔名稱為outer inner 內部類相當於外部類中的乙個成員,那麼就可以被...