【发布时间】:2009-12-07 11:53:15
【问题描述】:
有人能指出我的误解吗?
我有两个类,一个 Abstract 和一个 Concrete,如下:
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) 等级 = 混凝土;摘要的无参数 调用构造函数。
2)类= 具体的; Abstract 的 1-arg 构造函数 叫。
3)类=混凝土; 调用了具体的 1-arg 构造函数。
我的问题是:为什么从 Abstract 的 String arg 构造函数对 this() 的调用不调用 Concrete 上的这个 no-arg 构造函数?或者,也许更相关的是,有什么方法可以让 Abstract 的 String arg 构造函数调用 Concrete 上的 no-arg 构造函数,从而允许构造函数的“正确”链接?
【问题讨论】:
标签: java constructor this abstract