Ant*_*996 11 java constructor final private
我知道final类(你不能继承类)和私有构造函数(你不能创建类的实例)之间的区别.但是为什么Arrays和MathJava类都有私有构造函数但是Math是最终类而Arrays不是?
有什么不同?不是两个实用类?
谢谢
当类具有私有构造函数但不是final时,您可以在具有公共构造函数的同一类文件中定义内部类,并且可以实例化.但是您不能在该初始类文件之外定义任何子类.例如,这将编译:
public class Animal {
public void say() {
System.out.printLn("Animal says:");
}
private Animal() {}
public static class Cat extends Animal {
public Cat() {super();}
@Override public void say() {
super.say();
System.out.printLn("Meow");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这(在另一个文件中定义)不会:
public class Dog extends Animal {
public Dog() {super();} // compilation error here: The constructor Animal() is not visible
@Override public void say() {
super.say();
System.out.printLn("Wuf");
}
}
Run Code Online (Sandbox Code Playgroud)
此技术允许您定义类层次结构,您可以完全控制哪些类型可以扩展您的类(因为所有这些子类型必须在同一个类文件中枚举).
也就是说,java.util.Arrays由于上述原因,未被定义为非最终版 - 它可能只是一个实施者的疏忽,并不重要,所以它迄今尚未修复.