, но когда мы объявляем ctor private, это будет тот же эффект
Не обязательно, рассмотрим этот пример с использованием stati c classes:
public class SOExample {
private static class ClassWithPrivateConstructor {
private ClassWithPrivateConstructor() {
System.out.println("I have a private constructor");
}
}
private static class ClassThatExtendsClassWithPrivateConstructor extends ClassWithPrivateConstructor {
}
public static void main(String[] args) {
new ClassThatExtendsClassWithPrivateConstructor();
}
}
This напечатает «У меня есть личный конструктор».
но так ли это на самом деле? Есть ли разница для оптимизации кода или читабельности кода. и какие классы должны быть близки к наследованию,
Когда разработчик видит, что класс является окончательным, он понимает, что автор хотел, чтобы он не был расширен.
Когда разработчик видит, что у класса есть приватный конструктор, он понимает, что класс не может быть создан. Обычно это происходит потому, что это либо класс утилит stati c, либо синглтон.
Но для второго варианта java .util.Arrays не объявлен с final, даже если все методы Arrays заявлено: c
Это хорошее наблюдение. Я предполагаю, что это, вероятно, должно было быть, но не может быть изменено сейчас для обратной совместимости.