java的內部類知識點

非靜態的內部類可以訪問外圍類的所有成員

package practice;

public class Outter 
{
	private static int var1=1;
	private int var2=4; 
	private static void s()
	{
		System.out.println("static function in Outter");
	}
	private void d()
	{
		System.out.println("function in Outter");
	}
	 private class Inner
	 {
		 public void f()
		 {
			 System.out.println("static var in outter :"+var1);
			 System.out.println("var in outter :"+var2);
			 s();
			 d();
		 }
	 }
	public static void main(String[]args)
	{
		Outter out=new Outter();
		Outter.Inner in=out.new Inner();
		in.f();
	}
}

輸出如下:

static var in outter :1
var in outter :4
static function in Outter
function in Outter


當在內部類中想要擁有一個外部類引用的時候可以使用

類名.this

例如outter.this

而在一個外部類創以前是不可能創建一個內部類對象的,就像上述代碼所示的那樣,先創建外圍對象,然後通過.new才能創建其內部對象

當然上面所說的都是非靜態的內部類


匿名內部類,當你需要一個輔助類完成某些任務又不希望這個類是公共可用的,這時匿名內部類就是一個很好的選擇

但是當匿名類想要使用一個在其外部定義局部變量時那麼那個參數引用必須是final類型的,至於爲什麼在內部類引用局部變量時必須是final型的,一種解釋是因爲局部變量與匿名類的生存期是不一致的,也就是說當一個方法調用結束了它的局部變量也就被”殺死”了,爲匿名類卻不一定,這樣就造成了一個內部類使用了一個不存在的變量。


當不需要外圍類與內部類存在任何聯繫時,我們應該使用static內部類。

既然不存在任何聯繫,在創建一個靜態內部類時就不用去創建外圍類了。


普通類與靜態類的區別

普通類的字段與方法不能爲靜態的,其中也就不能包含靜態類,而靜態類卻都可以做到。


內部類的存在價值,只說最重要的一點,那就是某種意義上的多重繼承。

當希望繼承兩個類時,只有內部類纔可以實現這樣的效果(java中),這是因爲內部類能夠獨立的實現一個類或者接口,無論外圍類是否已經實現。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章