根据Joshu Bloch的Effective Java," 仅提供静态工厂方法的主要缺点是没有公共或受保护构造函数的类不能被子类化。"有人可以解释这是什么意思吗?特别是粗体字。如果提供了一个静态工厂方法,那么具有私有构造函数的类不能正确地进行子类化吗?
答案 0 :(得分:3)
仅提供静态工厂方法是没有公共的类 或受保护的构造函数不能被子类化。
每当调用子类的构造函数时,也会调用父类的构造函数。在没有受保护或公共构造函数的情况下,子类或扩展类将毫无意义。因此存在缺点。
答案 1 :(得分:0)
Java要求派生类确保正确初始化继承的字段。它是通过在构造函数调用超类的构造函数时开始的。
此类代码应如
class Derived class Parent{
public Derived(){
super();//this will be added automatically by compiler
//or super(arguments) if you want to use constructor with arguments
}
}
但是如果超类不能使其构造函数可访问(它是privet),派生类就不能在其任何构造函数中添加super
调用。这意味着我们无法为构造函数创建有效的代码,并且由于所有类必须至少有一个构造函数,派生类才能编译。