將類定義置於另一個類內部即為內部類。在外部類非靜態方法中,使用內部類與普通類無異:
public class Parcel1 {
class Contents { int value() { return 11; } }
class Destination { Destination(String s) {} String readLabel() { return ""; } }
public void ship(String dest) {
Contents c = new Contents(); // 同普通類
Destination d = new Destination(dest);
}
}
更典型用法:外部類提供工廠方法返回內部類實例(上溯造型至接口/基類):
public class Parcel2 {
class Contents { ... }
class Destination { ... }
public Destination to(String s) { return new Destination(s); }
public Contents cont() { return new Contents(); }
}
在外部類非靜態方法之外(如 main、其他類),必須使用完整名稱並憑藉外部實例:
Parcel2 q = new Parcel2();
Parcel2.Contents c = q.cont(); // 通過工廠方法
Parcel2.Destination d = q.to("Borneo"); // 通過工廠方法
// 或直接創建(需外部實例):
Parcel2.Contents c2 = q.new Contents();
Parcel2.Destination d2 = q.new Destination("Tanzania");
OuterClass.InnerClass 為完整類型名。外部實例 q 提供隱式 this 綁定。