小编典典

Java —私有构造函数vs最终函数

java

假设有一个类,其所有构造函数都声明为private。

例如。:

public class This {
    private This () { }

    public someMethod( ){
    // something here
    }
   // some more-- no other constructors
}

据我所知,将所有构造函数设为私有类似于将类“ This”声明为 final ,因此无法进行扩展。

但是,我收到的Eclipse消息给我的印象是这是可能的-可以扩展全构造函数私有类。看看这个:

当我尝试使用类似的方法扩展此类时

public class That extends This {
    ...
}

Eclipse给了我一个错误:“ 隐式超级构造函数This()对于默认构造函数不可见。必须定义一个显式构造函数。

当我定义自己的构造函数时:

public class That extends This {
    That () {..} 
    ...
}

这次,我得到:“ 隐式超级构造函数This()对于默认构造函数不可见。必须显式调用另一个构造函数。

有没有一种解决方法-扩展所有构造函数都是私有的类?

如果是,如何?

如果否,则i。)使类的构造函数私有,以及ii。)将其定义为 final 阻止类扩展之间有什么区别?

注意: 我看到Java中的构造函数可以私有吗?在其他一些讨论中。


阅读 216

收藏
2020-10-15

共1个答案

小编典典

具有私有构造函数的类只能被实例化,除非该类内部具有表单。这使它无法从其他类中扩展出来(可能,但不会编译)。

这并不意味着它根本不能被子类化,例如,在内部类中,您可以扩展并调用私有构造函数。

2020-10-15