1. 程式人生 > 實用技巧 >java面向物件(上)--內部類

java面向物件(上)--內部類

內部類  

  在java中,允許在一個類的內部定義類,這樣的類又被稱為內部類,這個內部類所在的類稱作外部類。根據內部類的位置、修飾符和定義的方式可以分為成員內部類、靜態內部類和方法內部類。

成員內部類

  在一個類中除了可以定義成員變數、成員方法,還可以定義類,這樣的類被稱為成員內部類。在成員內部類中可以訪問外部類的所有成員。

 1  class Outer {
 2      //定義類的成員變數
 3    private int num = 4;
 4    //下面的程式碼定義了一個成員內部類
 5     class Inner{
 6         void show(){
 7             //
在成員內部類的方法中可以訪問外部類的成員變數 8 System.out.println("num =" + num); 9 } 10 } 11 //下面的程式碼定義了一個成員方法,方法中訪問成員內部類 12 public void test(){ 13 Inner inner = new Inner(); 14 inner.show(); 15 } 16 17 } 18 class Example { 19 public static void main(String[] args) {
20 //建立外部類物件 21 Outer outer = new Outer(); 22 outer.test(); 23 } 24 }

執行結果:

  從執行結果可以看出,內部類可以在外部類中被使用,並能訪問外部類的成員。

  

  如果想通過外部類去訪問內部類,則需通過外部類物件去建立內部類,建立內部類對的具體語法格式如下:  

    外部類名.內部類名 變數名=new 外部類名().new內部類名();

  執行結果跟上面一樣,需要注意的是,如果內部類被宣告為私有,外界無法訪問。

靜態內部類

  可以使用static關鍵字來修飾一個成員內部類,該類被稱作靜態內部類,它可以在不建立外部類物件的情況下被例項化。

    外部類名.內部類名 變數名= new 外部類名.內部類名

 1  class Outer {
 2      //定義類的成員變數
 3    private static int num = 6;
 4    //下面的程式碼定義了一個靜態內部類
 5    static class Inner{
 6         void show(){
 7             System.out.println("num =" + num);
 8         }
 9    }
10 
11 }
12 class Example {
13     public static void main(String[] args) {
14         //建立內部類物件
15        Outer.Inner inner = new Outer.Inner();
16        inner.show();
17     }
18  }

執行結果:

  內部類Inner使用static關鍵字來修飾,是一個靜態內部類,可以看出靜態內部類的例項化方式與非靜態內部類的成員內部類的例項化方式是不一樣的。

注意:

  1.在靜態內部類中只能訪問外部類的靜態成員變數,如將變數num前面的static去掉,程式編譯會報錯。

  2.在靜態內部類中可以定義靜態的成員,而在非靜態的內部類中不允許定義靜態的成員。

方法內部類

  方法內部類是指在方法內部定義的類,它只能在當前方法中被使用。

 1  class Outer {
 2      //定義類的成員變數
 3    private  int num = 4;
 4    public void test() {
 5        //下面是在方法中定義的類
 6         class Inner {
 7            void show() {
 8                //訪問外部類的成員變數
 9                System.out.println("num =" + num);
10            }
11        }
12        Inner inner = new Inner();
13         inner.show();
14    }
15 }
16 class Example {
17     public static void main(String[] args) {
18         //建立外部類物件
19        Outer outer = new Outer();
20        //定義test方法
21        outer.test();
22     }
23  }

執行結果:

  在Outer類的test()方法中定義了一個內部類Inner,由於Inner是方法內部類,因此程式只能在建立該類的例項物件並呼叫show方法。從執行結果來看,方法內部類也可以訪問外部類的成員變數num。