Может кто-нибудь указать, что я неправильно понимаю?
У меня есть два класса, абстрактный и конкретный, следующим образом:
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) Класс =
Бетон; 1-аргументный конструктор тезисов
называется.
3) Класс = Бетон;
1-arg конструктор бетона называется.
У меня такой вопрос: почему вызов this () из конструктора аргумента String в аргументе Abstract не вызывает этот конструктор без аргументов в Concrete? Или, может быть, более уместно, есть ли способ заставить конструктор аргумента String в аргументе Abstract вызывать конструктор no-arg в Concrete, позволяя «надлежащим» связать конструкторы?