內部類是指在一個外部類的內部再定義一個類。內部類作爲外部類的一個
成員,並且依附於外部類而存在的。內部類可爲靜態,可用protected和
private修飾(而外部類只能使用public和缺省的包訪問權限)。內部類
主要有以下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類
爲什麼需要內部類?
典型的情況是,內部類繼承自某個類或實現某個接口,內部類的代碼
操作創建其的外圍類的對象。所以你可以認爲內部類提供了某種進入其外
圍類的窗口。使用內部類最吸引人的原因是:
每個內部類都能獨立地繼承自一個(接口的)實現,所以無論外圍類
是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。如果沒有
內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問
題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完
整。接口解決了部分問題,而內部類有效地實現了“多重繼承”。
A:成員內部類
作爲外部類的一個成員存在,與外部類的屬性、方法並列。
- package cn.com.zxx;
- /**
- * 成員內部類
- * @author acer
- * 注意:內部類是一個編譯時的概念,一旦編譯成功,就會成爲兩個不同的類,對於如下的兩個類,
- * 編譯完成後就變爲了:outer.class 和 outer$inner.class兩個類
- */
- public class Outer {
- private static int i =1;
- private int j =10;
- private int k =20;
- public static void outer_f1(){
- }
- public void outer_f2(){
- }
- //成員內部類中,不能定義
- //成員內部類中,可以訪問外部內中的所有成員
- class Inner{
- // static int inner_i =100;
- int i =1;
- int j =100;
- void inner_f1(){
- System.out.println(i);
- System.out.println(j);
- System.out.println(this.j);
- System.out.println(Outer.this.j);
- System.out.println(k);
- outer_f1();
- outer_f2();
- }
- }
- //外部類的非靜態方法訪問內部成員類
- public void outer_f3(){
- Inner inner = new Inner();
- inner.inner_f1();
- }
- //外部類的靜態方法訪問內部類
- public static void outer_f4(){
- Outer outer = new Outer();
- Inner inner = outer.new Inner();
- inner.inner_f1();
- }
- public static void main(String[] args) {
- //outer_f4();
- //如果要直接創建內部類的對象,不想想當然地認爲只需要加上外圍內的名字就可以了
- //而是必須使用外部內的一個對象來創建一個內部類的對象
- Outer outer = new Outer();
- Inner inner = outer.new Inner();
- inner.inner_f1();
- }
- }