誰かが私が誤解していることを指摘できますか?
次のように、AbstractとConcreteの2つのクラスがあります。
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)クラス=コンクリート; Abstractの引数なしコンストラクターが呼び出されました。
2)クラス=コンクリート; Abstractの1引数コンストラクターが呼び出されました。
3)クラス=コンクリート; と呼ばれるConcreteの1引数コンストラクター。
私の質問はこれです:AbstractのString argコンストラクターからthis()を呼び出すと、Concreteでこのno-argコンストラクターが呼び出されないのはなぜですか?または、おそらくもっと適切に、AbstractのString argコンストラクターにConcreteのno-argコンストラクターを呼び出して、コンストラクターの「適切な」チェーンを可能にする方法はありますか?