【发布时间】:2015-06-21 09:41:01
【问题描述】:
根据 Joshu Bloch 的 Effective Java,“仅提供静态工厂方法的主要缺点是不能对没有公共或受保护构造函数的类进行子类化。”有人可以解释一下这是什么意思吗?尤其是粗体字。如果提供了静态工厂方法,那么带有私有构造函数的类不能被子类化吧?
【问题讨论】:
-
改写了问题。
标签: java
根据 Joshu Bloch 的 Effective Java,“仅提供静态工厂方法的主要缺点是不能对没有公共或受保护构造函数的类进行子类化。”有人可以解释一下这是什么意思吗?尤其是粗体字。如果提供了静态工厂方法,那么带有私有构造函数的类不能被子类化吧?
【问题讨论】:
标签: java
只提供静态工厂方法是那些没有公共的类 或受保护的构造函数不能被子类化。
每当调用子类的构造函数时,也会调用父类的构造函数。在没有受保护或公共构造函数的情况下,子类化或扩展类将毫无意义。因此不利。
【讨论】:
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 调用。这意味着我们无法为构造函数创建有效的代码,并且由于所有类都必须至少有一个构造函数,因此派生类无法编译。
【讨论】: