小弟最近學習內部類總結了下面一些內容,參考了一些資料,不足之處請指出,謝謝!
成員內部類:
相當於類的非靜態成員,可以用許可權修飾符來修飾,包括private、protected、public.
1、定義成員內部類
class outter
//外部類的普通成員
int j = 0;
}2、外部類之內置立成員內部類物件
語法和普通的建立物件相同,用new操作符呼叫相應的構造方法即可。注意的是,非靜態內部類屬於外部類的非靜態成員,不能在靜態上下文使用。
例子:class outter
}//外部類的普通成員
int j = 0;
public void test()
}3、外部類之外建立成員內部類物件
既然是外部類的非靜態成員,就必須在外部類物件存在的情況下使用。
基本語法是
《外部類類名》.《內部類類名》 引用變數名稱 = 《外部類物件的引用》.new 《內部類構造器》;
《外部類類名》.《內部類類名》 引用變數名稱 = new 《外部類構造器》.new 《內部類構造器》;
(1)、建立內部類物件時物件引用必須是《外部類類名》.《內部類類名》
(2)、呼叫內部類的構造方法不能直接用new 而是要用《外部類物件的引用》.new呼叫
例子:class outter
}//外部類的普通成員
int j = 0;
}class maintest
}在外部類之外訪問內部類時需要注意許可權修飾符的限制,這點和類成員一樣。
3、內部類編譯後生成的.class檔名稱格式是《外部類類名》$《內部類類名》。
4、內部類與外部類之間的成員互相訪問
內部類可以訪問外部類的任何成員,包括private成員。
外部類訪問內部類的成員需要建立內部類的物件,之後可以訪問內部類的任何成員,包括private成員,需要注意的是成員內部類不可以有靜態成員。
當外部類的成員和內部類的成員重名時單單用this是區分不了的。在內部類中訪問外部類的成員時可以用如下語法區分
《外部類類名》.this.《外部類中需要被訪問的成員名》;
區域性內部類
內部類定義在方法中成為區域性內部類,只在區域性有效。該類只為所在的方法塊服務。
區域性內部類和成員內部類一樣可以訪問外圍類的所有成員,但是不可以訪問同在乙個區域性塊的普通區域性變數。如果要訪問,此區域性變數要被宣告稱final的。
**塊結束後普通的區域性變數會消亡,而建立的區域性內部類物件並不會隨著語句塊的結束而消亡。final的區域性變數的儲存方式和普通的區域性變數不同,其不會因為語句塊的結束而消失,還會長期存在,因此可以被區域性內部類訪問。
例子:public class innerclasstest1
}class outter
}forinner = new inner();
return forinner;} }
inte***ce forinner
由於區域性內部類只在區域性有效,所以不能在外面用區域性內部類的引用指向區域性內部類的物件,只能用區域性內部類實現介面並建立區域性內部類物件,在外面用介面引用指向區域性內部類物件。
靜態方法中的區域性內部類只能訪問外圍類的靜態成員,訪問不了非靜態成員。
區域性內部類生成的.class檔名稱是《外部類類名》$《內部類類名》其中n是該區域性的第幾個內部類
靜態內部類
靜態內部類的定義
class outter
}由於靜態內部類是外部類的靜態成員,所以靜態內部類只能訪問外部類的靜態成員。並且建立靜態內部類的物件不依賴外部類的物件。在外部類之外建立靜態內部類物件的語法如下
《外部類類名》.《內部類類名》 引用變數名 = new 《外部類類名》.《內部類構造器》;
例子:class outter
}public void getinner()
}public class maintest
}靜態內部類實際上已經脫離了外部類的控制,建立物件時也不再需要外部類物件的存在,實質上只是乙個放置在別的類中的普通類而已。
匿名內部類
基於繼承的匿名內部類,語法如下:
new 《匿名內部類要繼承父類的對應構造器》 ;
基於實現介面的匿名內部類,語法如下:
new 《介面名》
匿名內部類中使用外面的變數要被宣告成final的。
匿名內部類物件初始化的**可以寫在其非靜態塊中
匿名內部類生成的.class檔案是《外部類類名》$.class n是該類的第幾個匿名內部類。
各種內部類可用的修飾符
成員內部類
final、abstract、public、private、protected、static
靜態內部類
final、abstract、public、private、protected
區域性內部類
final、abstract
匿名內部類
不能對匿名內部類使用修飾符
內部介面
定義在類中的內部介面無論是否被static修飾都是靜態成員。
內部介面宣告成private的意味著只能被外部類中的某個內部類來實現。
內部介面不能扮演區域性的角色,否則編譯報錯。因為介面的設計初衷是對外公布,讓很多類實現,而區域性的角色違背了介面的設計初衷。
介面中的內部介面屬於介面的成員,具有介面成員的所有屬性,不能用private進行修飾。
外部介面外實現內部介面的語法如下:
class 《類名》 implements 《外部介面名》.《內部介面名》
java 內部類 自己的一些理解
注意 內部類相同於 外部類的乙個屬性 和 外部類的其他屬性 是同級的 只不過訪問的方式不同 內部類私有的方法肯定也能被外部類訪問 內部類可以訪問外部類的任意變數和方法 除了靜態內部類 靜態方法裡面 只能訪問 靜態變數和靜態方法 定義在自己方法裡面的區域性變數 內部類中只有靜態內部類才能定義 靜態成員...
內部類知識總結
1.內部類定義 可以將乙個類的定義放在另乙個類或者介面的定義內部.2.內部類分類 3.內部類與外部類的通訊 3.1 對於平凡的內部類 形如class outter void g class inner 從inner類內部可訪問outter類的任何域和方法.通常平凡的內部類儲存了乙個對外部類的物件的引...
內部類 內部類的訪問 匿名內部類
內部類 將乙個類定義在另乙個類的裡面,對立面那個類就成為內部類 內建類,巢狀類 定義 當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事務在使用外部事物的內容。舉例子心臟 內部類的訪問規則 1內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類的成員 因為內部類中持有...