Это правда, что уменьшение видимости конструктора в абстрактном классе (с public
до protected
) ничего не меняет в отношении неспособности кода непосредственно создавать экземпляр абстрактного класса.
Однако дело не в этом. Один делает конструктор protected
просто для управления областями, точно так же, как один делает свойства элемента закрытыми.
Вот модифицированная версия того же класса, показывающая, что цель не состоит в том, чтобы предотвратить создание экземпляров:
public abstract class A {
protected A() {
this(0);
}
private A(int a) {
// not accessible to anyone but members of A
// the point is not to prevent instantiation, but to restrict access
}
}
Если создание защищенного конструктора предназначено для предотвращения создания экземпляров, то можно утверждать, что создание экземпляров возможно в самом абстрактном классе или его подклассах.