Java中內部類的詳細使用方法

內部類的使用

  1. 定義類的作用:

定義變量、創建實例、作爲父類被繼承

  1. 在外部類使用內部類

在外部類使用內部類與平時普通類的使用一樣,可以直接通過內部類類名進行new一個新的對象。區別: 不要在外部類的靜態成員(包括變量、方法)嘗試使用非靜態的內部類。

package com.InnerOuter;

public class Outter_6 {
	inner_6 i6 = new inner_6();
	
	public static void out() {
		System.out.println(i6.s);
	}
	public class inner_6{
		String s = "inner_s";
	}
}

  1. 在外部類以外使用非靜態內部類。首先 確保內部類不能是private修飾的成員,內部類是private修飾的成員只能是內部類訪問。其他修飾符則根據修飾符的範圍進行選擇訪問。在外部類之外的地方使用內部類在聲明的地方也有點區別,在外部類以外的地方聲明內部類的實例,必須是建立在外部類的基礎之上。
package com.InnerOuter;

import com.InnerOuter.Outter_6.inner_6;

public class Outter_6Run {

	public static void main(String[] args) {
		//在外部類之外的類定義一個內部類實例
		Outter_6.inner_6 i6 = new Outter_6().new inner_6();
		
		//等價於下面的代碼
		//定義內部類變量
		Outter_6.inner_6 i66 ;
		//創建外部類實例,讓內部類寄生在實例裏面
		Outter_6 o6 = new Outter_6();
		//創建內部類實例
		i66 = o6.new inner_6();
		
	}
}

在外部類以外的地方創建內部類實例,這個時候的內部類名應該是 Outter_6.inner_6 ,又因爲非靜態內部類必須是根基與外部類之上,所以需要一個外部類實例來調用內部類構造器 o6.new inner_6()

  1. 如果有一個外部類以外的類繼承了內部類,成爲內部類的子類,那麼在調用構造器的時候也需要格外的注意。

//此段代碼與jdk的版本有關係,較低版本會發生編譯錯誤,建議自行測試一下
package com.InnerOuter;

public class Outter_6_ex extends Outter_6.inner_6{

	public Outter_6_ex oex( Outter_6 o ) {
		o.super();
	}
}

  1. 在外部類以外使用靜態內部類。靜態內部類本身就是和外部類相關的(類內部類),因此在聲明靜態內部類實例的時候,不再需要使用到外部類對象。只需要使用外部類即可。
//創建一個外部類和靜態內部類
package com.InnerOuter;

public class Outter_7 {
	public static class inner_7		
	}
}

//創建一個運行類
package com.InnerOuter;

public class Outter_7Run {

	public static void main(String[] args) {
		//聲明內部類對象
		Outter_7.inner_7 oi = new Outter_7.inner_7();
		//拆分改寫
		//創建變量
		Outter_7.inner_7 oii ;
		//new一個靜態內部類實例
		oii = new Outter_7.inner_7();
	}

}

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