我不明白爲什麼在Java中,下面的代碼錯誤:爲什麼嵌套類在Java和C#之間表現不同?
public abstract class TestClass
{
private final int data;
protected TestClass(int data) { this.data = data; }
public final class InnerClass extends TestClass
{
private InnerClass(int data) { super(data); }
public static final TestClass CONSTANT = new InnerClass(5);
}
}
的錯誤是在public static final TestClass CONSTANT = new InnerClass(5);
一部分。 的錯誤是:
I:\Documents\NetBeansProjects\TestingGround\src\testingground\TestClass.java:22: error: non-static variable this cannot be referenced from a static context public static final TestClass CONSTANT = new InnerClass(5); ^I:\Documents\NetBeansProjects\TestingGround\src\testingground\TestClass.java:22: error: Illegal static declaration in inner class TestClass.InnerClass public static final TestClass CONSTANT = new InnerClass(5); ^ modifier 'static' is only allowed in constant variable declarations 2 errors
如果我試圖實現在C#一樣的,它工作正常。
public abstract class TestClass
{
private readonly int data;
protected TestClass(int data) { this.data = data; }
public sealed class InnerClass : TestClass
{
private InnerClass(int data) : base(data) { }
public static readonly TestClass CONSTANT = new InnerClass(5);
}
}
爲什麼Java不允許這樣做?
我更新了標題......不幸的是,這個問題很多類似的重複http: //www.bing.com/search?q=Why+nested+classes+behave+differently+between+Java+and+C%23% ...但Jon Skeet回答的並不多 - 因此讓我們有另一個:)隨意更名標題以更好地反映您的問題。 – 2015-03-19 07:02:01
@AlexeiLevenkov這兩個'重複'都沒有解決這個問題。一個是問爲什麼一個C#嵌套類沒有像Java內部類那樣訪問其外部類的內部。有人問,Java靜態類和C#靜態類之間有什麼區別,但是從這個問題給出的問題答案來看,這有點認知上的飛躍。 – Pharap 2015-03-19 07:17:45