这个问题一直困扰着我一段时间,我还没有找到一个好的答案(除了“就是这样”)。
让我给出一些背景代码,以说明我在说什么。
class Note {
    private final String name = "Note";
    public Note() {
        System.out.println(name);
    }
    // ...
}
class Todo extends Note {
    private final String name = "Todo";
    public Todo() {
        System.out.println(name);
    }
    // ...
}
// ...
Note note = new Todo(); // case 1
Todo todo = new Todo(); // case 2
那么案例 1 和案例 2 是如何打印出来的:
Note
Todo
这是没有意义的,因为Todo()(constructor) 不调用super()(至少不可见)。为什么子类必须调用父类的默认构造函数,为什么不要求任何子类实现构造函数?
我读了几个与此相关的问题,但没有人回答为什么。
编辑:
我想我的例子有点糟糕,但它实际上是 Java 7 认证问题的衍生品。从答案的集合中,我现在明白了为什么。让我提供一个更好的例子:
public Note {
    private String description;
    public Note() {
        description = "I'm a Note";
    }
    public Note( String description ) {
        this.description = description;
    }
    // getters/setters/etc.
}
public Todo extends Note {
    // field vars..
    public Todo() {
        // empty constructor
    }
    // getters/setters/etc..
}
所以现在这更有意义了,因为当Todo被创建时,如果super()没有被插入到封面后面,则不会初始化的Note方面。Todo在这种情况下,拥有一个子类是没有意义的。谢谢大家!