內部類別(Inner Class)
定義在另一個類別內部的類別稱為巢狀類別(Nested Class),未被宣告static的稱為內部類別,宣告為static的稱為靜態巢狀類別。
Class 類別名稱{
//內容
Class 類別名稱{
//內容
}
}
裡面的為內部類別,外面的稱為外部(Outter)類別。內部類別可以直接存取外部類別的所有成員。
//書籍範例
package com.mycompany.testnine;
class Outter{
private int i=1,j=2;
static int k=3;
class Inner{
int j=4,k=5;
void print(){
System.out.print(i);
System.out.print(Outter.this.j);
System.out.print(Outter.k);
System.out.println(j);
}
}
void callInner(){
Inner in=new Inner();
in.print();
}
}
public class testNine {
public static void main(String[] args) {
Outter or= new Outter();
or.callInner();
Outter.Inner ir = or.new Inner();
ir.print();
}
}
Inner in=new Inner();
在callInner中先建立內部物件,才能用來呼叫內部類別的方法
Outter.Inner ir = or.new Inner();
用外部物件建立內部物件
Outter.k
在內部類別要呼叫外部類別的靜態變數時,要加上外部類別的名稱
Outter.this.j
實體變數還要加上this才能存取。
匿名類別(Anonymous Class)
匿名類別用來臨時定義一個類別或介面的子類別來產生物件,因為用完就不需要了,所以不用指定名稱。
New 父類別或介面名稱{
//內容
}
package com.mycompany.testten;
interface Face{
void hello();
}
public class testTen {
public static void main(String[] args) {
final int a=10;
Face h = new Face() {
public void hello(){
System.out.println("hello!");
}
};
h.hello();
}
}
以匿名方式實作Face介面及產生物件。
靜態巢狀類別(Static Nested Class)
可直接使用「外部類別.內部類別名稱」,存去內部類別的靜態成員,或直接建立內部物件。
參考資料:
最新java程式語言第六版