答案是一样的java:
THere’s no reason for a public constructor for an abstract class. I’d assume that the reason that the compiler doesn’t complain is as simple that they just didn’t spend time covering that since it really doesn’t matter if it’s public or protected. (07000)
你不能从除直接子类之外的任何东西调用抽象类的构造函数。
因此,对抽象类的构造函数的访问修饰符添加特殊规则不会对语言添加有用的东西。
有一件事看起来像这个规则的异常 – 如果抽象类只定义了一个默认的构造函数,那么子类不必实现一个构造函数:这是合法的:
public abstract class A {
public A() {}
}
public class B extends A {}
所以我们可以通过调用新的B()创建一个B – 但是注意,我们仍然创建一个B而不是一个A.再次,如果A中的构造函数是public或protected也没关系。它只是不应该是私有的,但编译器会注意到并抱怨…
实际上,我们调用一个“隐形”公共默认构造函数在B上做一个简单的super()调用…