內部類的使用
定義變量、創建實例、作爲父類被繼承
在外部類使用內部類與平時普通類的使用一樣,可以直接通過內部類類名進行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";
}
}
- 在外部類以外使用非靜態內部類。首先 確保內部類不能是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()
- 如果有一個外部類以外的類繼承了內部類,成爲內部類的子類,那麼在調用構造器的時候也需要格外的注意。
//此段代碼與jdk的版本有關係,較低版本會發生編譯錯誤,建議自行測試一下
package com.InnerOuter;
public class Outter_6_ex extends Outter_6.inner_6{
public Outter_6_ex oex( Outter_6 o ) {
o.super();
}
}
- 在外部類以外使用靜態內部類。靜態內部類本身就是和外部類相關的(類內部類),因此在聲明靜態內部類實例的時候,不再需要使用到外部類對象。只需要使用外部類即可。
//創建一個外部類和靜態內部類
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();
}
}