| 種類 | 層級 | Inner |
|---|---|---|
| static nested class | member | no |
| inner [non-static] class | member | yes |
| local class | local | yes |
| anonymous class | only the point where it is defined | yes |
大體上分為成員等級,以及區域變數等級,也就是定義在方法中。後者有 local class 及 anonymous class ,前者為 static nested class 及 inner [non-static] class ,我們在這裡介紹前者,也就是成員等級的巢狀類別。
以下程式示範 inner [non-static] class 的定義及使用
class InnerDemo {
private int outernumber = 33;
public void printNumber() {
System.out.println("印出外層類別的數值");
System.out.println(outernumber);
}
public void event() {
InnerClass i = new InnerClass();
i.printInner();
i.printOuter();
}
private class InnerClass {
private int innernumber = 77;
public void printInner() {
System.out.println("印出內層類別的數值");
System.out.println(innernumber);
}
public void printOuter() {
printNumber();
}
}
public static void main(String[] args) {
InnerDemo t = new InnerDemo();
t.printNumber();
t.event();
}
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:InnerDemo.java
功能:示範物件導向的基本觀念
作者:張凱慶
時間:西元 2010 年 10 月 */編譯後執行,結果如下

第 15 行到第 26 行即為 inner class 定義的地方
private class InnerClass {
private int innernumber = 77;
public void printInner() {
System.out.println("印出內層類別的數值");
System.out.println(innernumber);
}
public void printOuter() {
printNumber();
}
}Inner class 中可以定義自己的屬性及方法,如同一般的類別定義。第 9 行到第 13 行
public void event() {
InnerClass i = new InnerClass();
i.printInner();
i.printOuter();
}event() 方法使用 InnerClass 類別建立實體物件,然後呼叫 InnerClass 的 printInner() 與 printOuter() 方法。這裡須留意, inner class 可以自由使用其他同等級的成員,但是反過來,與 inner class 同等級的成員無法直接使用 inner class 中所定義的屬性及方法,必須透過建立 inner class 的實體物件才可使用。
| 中英文術語對照 | |
|---|---|
| 巢狀類別 | nested class |
| static nested class | static nested class |
| inner class | inner class |
| local class | local class |
| anonymous class | anonymous class |
參考資料
http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html
http://java.sun.com/docs/books/jls/third_edition/html/classes.html
http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html
http://java.sun.com/docs/books/jls/third_edition/html/classes.html
沒有留言:
張貼留言