我讀過關於class fromal parameters的問題,然後問題出現,爲什麼下面的代碼是不合格的?Java中的內部類構造
類A
:
package org.gradle;
public class A extends B.Inner{
public A(B s){
s.super(new B()); //error
s.super(); //OK
}
}
類B
:
package org.gradle;
public class B{
public class Inner{
}
}
什麼說的關鍵部分是:
非私有內部成員類的構造函數隱 聲明,作爲第一個形式參數,一個變量代表 立即封閉類
這樣的情況下,我希望,除了默認的構造函數,我們應該有一個具有以下簽名的構造函數:
Inner(B b);
爲什麼不呢?
謝謝,但它不是很清楚爲什麼我不能明確地調用該構造函數,如http://ideone.com/igXgCM? May JLS提供了我失去的限制嗎? – 2014-11-04 07:21:43
@ St.Antario:這不是內部類的工作方式 - 你會使用'new B()。new Inner()'來代替。你不打算把它看作是一個額外的參數 - 你打算把它看作是用來構造內部類實例的封閉類的實例。 – 2014-11-04 07:22:59
JLS是否明確指出? – 2014-11-04 07:26:51