Roa*_*oam 6 java eclipse constructor extending
假设有一个类,其所有构造函数都声明为private.
例如.:
public class This {
private This () { }
public someMethod( ){
// something here
}
// some more-- no other constructors
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将所有构造函数设为私有类似于将"This"类声明为final - 这样它就无法扩展.
但是,我得到的Eclipse消息给我的印象是这是可能的 - 一个全构造函数 - 私有类可以扩展.看看这个:
当我尝试用类似的东西扩展这个类
public class That extends This {
...
}
Run Code Online (Sandbox Code Playgroud)
Eclipse给出了一个错误:" 隐式超级构造函数This()对默认构造函数不可见.必须定义一个显式构造函数. "
当我定义自己的构造函数时:
public class That extends This {
That () {..}
...
}
Run Code Online (Sandbox Code Playgroud)
这次我得到:" 隐式超级构造函数This()对于默认构造函数是不可见的.必须显式调用另一个构造函数. "
有没有办法绕过这个 - 扩展一个所有构造函数都是私有的类?
如果有,怎么样?
如果不是,那么阻止一个类被i扩展的区别是什么?)使它的构造函数变为私有,以及ii.将它定义为final?
注意:我看到Java中的构造函数可以是私有的吗?在其他一些讨论中.
das*_*ght 21
您声明一个类final
与其构造函数private
有不同的原因:
final
以指示该类不是为继承而设计的.private
为类提供对其实例化的控制.换句话说,使用final
控件继承,同时使用private
构造函数控制实例化.
请注意,声明构造函数private
仅禁用外部继承.在类中,您仍然可以使用命名或匿名派生类继承它.
当你创建类的所有构造函数时,private
你需要一个static
公共的方法来使类可用.一种常见的static
方法是工厂方法:您可以让类的用户通过公共静态方法间接调用私有构造函数.
具有私有构造函数的类不能实例化,除非在同一个类中形成。这使得从另一个类扩展它变得无用(可能,但不会编译)。
这并不意味着它根本不能被子类化,例如在内部类中,您可以扩展并调用私有构造函数。
归档时间: |
|
查看次数: |
6597 次 |
最近记录: |