Java 內部類實例

參考文章
爲什麼需要 Java內部類

  • 1 每個內部類都能獨立的繼承一個接口的實現,所以無論外部類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。內部類使得多繼承的解決方案變得完整
  • 2 方便將存在一定邏輯關係的類組織在一起,又可以對外界隱藏
  • 3 方便編寫事件驅動程序
  • 4 方便編寫線程代碼

1 根據註釋填寫 1 2 3 處的代碼

public class Test {

    public static void main(String[] args) {
        // 初始化 Bean1
        (1)
        bean1.I++;
        // 初始化 Bean2
        (2)
        bean2.J++;
        //初始化Bean3
        (3)
        Bean.Bean3 bean3 = bean.new Bean3();

    }

    class Bean1{
        public int I = 0;
    }

    static class Bean2{
        public int J = 0;
    }
}

public class Bean {
    class Bean3{
        public int K = 0;
    }
}

創建靜態內部類****對象的一般形式爲: 外部類類名.內部類類名 xxx = new 外部類類名.內部類類名()
創建成員內部類****對象的一般形式爲: 外部類類名.內部類類名 xxx = 外部類對象名.new 內部類類名()

Test test = new Test();    
Test.Bean1 bean1 = test.new Bean1();

Test.Bean2 b2 = new Test.Bean2();    

Bean bean = new Bean();     
Bean.Bean3 bean3 =  bean.new Bean3();   

2.下面這段代碼的輸出結果是什麼

public class Test {  
  public static void main(String[] args)  {  
        Outter outter = new Outter();  
        outter.new Inner().print();
  }
}

class Outter{
    private int a = 1;
    class Inner {
       private int a = 2;
       public void print() {
          int a = 3;
          System.out.println("局部變量:" + a);
          System.out.println("內部類變量:" + this.a);
          System.out.println("外部類變量:" + Outter.this.a);
       }
    }
}

答案: 3 2 1


最後補充一點知識:關於成員內部類的繼承問題。
一般來說,內部類是很少用來作爲繼承用的。但是當用來繼承的話,要注意兩點:

  • 成員內部類的引用方式必須爲 Outter.Inner.
  • 構造器中必須有指向外部類對象的引用,並通過這個引用調用super() — Java編程思想
class WithInner {
   class Inner{
   }
}

class InheritInner extends WithInner.Inner { 
   // InheritInner() 是不能通過編譯的,一定要加上形參 
   InheritInner(WithInner wi) {
       wi.super(); //必須有這句調用
   }
   
   public static void main(String[] args) {
      WithInner wi = new WithInner(); 
      InheritInner obj = new InheritInner(wi); 
   }
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章