有人能指出我誤解的是什麼嗎?Java:抽象類構造函數和this()
我有兩個班,一個抽象的,具體如下:
public abstract class Abstract
{
protected static int ORDER = 1;
public static void main (String[] args)
{
Concrete c = new Concrete("Hello");
}
public Abstract()
{
Class c = this.getClass();
System.out.println(ORDER++ + ": Class = "
+ c.getSimpleName()
+ "; Abstract's no-arg constructor called.");
}
public Abstract(String arg)
{
this();
Class c = this.getClass();
System.out.println(ORDER++ + ": Class = "
+ c.getSimpleName()
+ "; Abstract's 1-arg constructor called.");
}
}
和
public class Concrete extends Abstract
{
public Concrete()
{
super();
Class c = this.getClass();
System.out.println(ORDER++ + ": Class = "
+ c.getSimpleName()
+ "; Concrete's no-arg constructor called.");
}
public Concrete(String arg)
{
super(arg);
Class c = this.getClass();
System.out.println(ORDER++ + ": Class = "
+ c.getSimpleName()
+ "; Concrete's 1-arg constructor called.");
}
}
當我運行此我得到以下輸出:
1)Class =混凝土;摘要的no-arg 構造函數調用。
2)Class = 混凝土;調用Abstract的1-arg構造函數 。
3)Class = Concrete; 混凝土的1-arg構造函數調用。
我的問題是這樣的:爲什麼不從Abstract的字符串arg構造函數調用this()在Concrete上調用這個無參數構造函數?或者,也許更有針對性的是,有沒有辦法讓Abstract的String arg構造函數在Concrete上調用no-arg構造函數,從而允許構造函數的「適當」鏈接?
謝謝Jon。 getClass知道Object是一個具體事實,但this()調用Abstract no-arg構造器對我來說似乎有點不自然。 我試圖實現的鏈接在我看來似乎允許構造函數之間更自然的責任分工。我想我必須在Concrete的構造函數中複製代碼,或者將它移出到一個新的方法中,但由於我沒有編寫Abstract類的所有具體實現,所以我必須爲其他開發人員編寫文檔。 – 2009-12-07 12:34:15
所以你試圖把構造函數看作是虛擬方法嗎?是的,這是行不通的。 – 2009-12-07 13:06:25