但是当我们声明 ctor 私有时,效果是一样的
不一定,考虑这个使用静态类的例子:
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();
}
}
这将打印“我有一个私有构造函数”。
但真的一样吗?代码优化或代码可读性有什么区别。哪些类必须接近继承,
当开发人员看到一个类是 final 时,他们就会明白作者的意图是不应该扩展它。
当开发人员看到一个类有一个私有构造函数时,他们就明白这个类不能被实例化。这通常是因为它要么是静态实用程序类,要么是单例。
但是对于第二个选项 java.util.Arrays 没有用 final 声明,即使 Arrays 的所有方法都声明为静态
这是一个很好的观察。我的猜测是它可能应该是但现在不能为了向后兼容而改变。