java-巢狀類別
java-巢狀類別
建立一個java的Console範本程式
Main稱為外層類別,裡面的類別稱為巢狀類別
在類別裡面再定義一個Class1
然後去new,會得到一個錯誤
com.company.Main.this’ cannot be referenced from a static context
public class Main {
class Class1 {
}
public static void main(String[] args) {
// write your code here
Class1 c1 = new Class1();
}
}
這個令人疑惑的錯誤
其實 Class1 c1 = new Class1();
編譯器會加上this,Class1 c1 = this.new Class1();
但這樣為什麼會造成錯誤?
因為this指向的Main還未實例化
可以先建立Main物件,再去實例化Class1
Main m = new Main();
Class1 c1 = m.new Class1();
你也可以把巢狀類別定義為static
Class2 c2 = new Main.Class2();
巢狀類別的成員變數
static或non-static巢狀類別
都可以定義static和non-static members
巢狀類別的存取範圍
non-static巢狀類別
可以存取
- 在最高階層內的任何static成員或者static類別的static成員
- 最高階層的non-static成員
- 自己類別內的成員
static巢狀類別
可以存取
- 在最高階層內的任何static成員或者static類別的static成員
- 自己類別內的成員
區域巢狀類別
方法也可以定義類別,稱為區域巢狀類別
這個可以用在單一用途,確定其他地方都不用到