Java构造函数奇怪的行为

use*_*206 2 java constructor chaining

我已经运行了这段代码

public class Redimix extends Concrete{

    Redimix(){
        System.out.println("r ");
    }

    public static void main(String[] args) {
        new Redimix();
    }

}

class Concrete extends Sand{
    Concrete() { System.out.print("c "); }
    private Concrete(String s) { }
}

abstract class Sand{
    Sand(){
        System.out.print("s ");
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印出来,s c r但我期待的是,只有r我的问题是什么是对此的合理解释?

如果父基类是一个具有构造函数的抽象类,然后我们创建另一个类然后将它扩展到基类(在我们的Case Concreteextends Sand中)然后我们创建另一个类然后将它扩展到具体的类名(在我们的case redimix)将调用层次结构中的所有构造函数吗?(从上到下)

Boh*_*ian 6

始终将超类的构造函数称为构造函数的第一个操作.

如果没有显式调用超类的构造函数,则隐式调用默认构造函数("no args").