抽象类中的私有构造函数

Chr*_*ris 13 java constructor private class abstract

在Java中,在抽象类中使用私有构造函数的目的是什么?

在一篇评论中我得到了这个问题,我很好奇,我们需要以什么样的方式使用构造函数呢?

我认为它可以与抽象类中的另一个构造函数一起使用,但这非常简单.它也可以用于构造静态内部类,这将超越抽象类.

也许有更优雅的用法?

Mar*_*nik 31

如果private构造函数是该类的唯一构造函数,那么原因很明显:防止子类化.某些类仅用作静态字段/方法的持有者,并且不希望实例化或子类化.请注意,abstract修饰符在这种情况下是冗余的 - 有或没有它将不会有实例化.正如@JB Nizet在下面所说,abstract修饰符也是不好的做法,因为它向类的客户发送了错误的信号.实际上这堂课应该是final.

还有另一个用例,非常罕见:您可以abstract classprivate使用包含其自己的子类作为嵌套类的构造函数.这个习惯用法确保这些嵌套类是唯一的子类.实际上,enumJava中的s只使用这个成语.

如果周围有其他构造函数,那么构造函数真的没有什么特别之处private.它可以abstract像在任何其他类中一样在类中使用.


Thi*_*ilo 6

我唯一能想到的就是重用其他(受保护)构造函数共享的公共代码.然后他们可以在第一行调用私有构造函数.