種類 | 層級 | 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
沒有留言:
張貼留言