有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java静态工厂方法

根据Joshu Bloch的高效Java,“只提供静态工厂方法的主要缺点是没有公共或受保护构造函数的类不能被子类化。”有人能解释一下这是什么意思吗?尤其是粗体字。若提供或不提供静态工厂方法,那个么带有私有构造函数的类就不能被子类化,对吗


共 (2) 个答案

  1. # 1 楼答案

    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调用。这意味着我们不能为构造函数创建有效的代码,因为所有类都必须至少有一个构造函数,所以派生类不能编译

  2. # 2 楼答案

    Providing only static factory methods is that classes without public or protected constructors cannot be subclassed.

    每当调用子类的构造函数时,也会调用父类的构造函数。在缺少受保护或公共构造函数的情况下,对类进行子分类或扩展将毫无意义。因此不利