分配从超
到方法覆盖较弱的访问我有一个名为Module
类,它有一个方法onEnable();
现在我有一类叫做Config
,并想使onEnable();
方法private
,因为有一个预定义的演技和一类扩展Config
应'被允许改变行为。分配从超
有没有办法做到这一点?
例
class Module{
public void onEnable(){
}
}
A延伸类模块,其被允许使用onEnable
:
class HelloWorldModule{
@Override
public void onEnable(){
System.out.println("Hello, World!");
}
}
现在配置类,其中我想,onEnable
是私人使得延伸配置类不能!覆盖onEnable
:
class Config{
@Override
private void onEnable(){
}
}
所以现在,一类名为ProgrammConfig
延伸Config
不能覆盖onEnable
。
但是,这是行不通的,因为你不能重写public
方法的private
方法。
通过声明的方法为public
,你说,它应该是可以调用这个类的每个实例所述方法,包括子类。在子类中声明一个方法为private
没有意义,因此也是不允许的。
现在,如果你关心的子类覆盖方法,你可以声明的方法final
防止这种情况:
class Config extends Module{
@Override
public final void onEnable(){}
//Whatever
}
啊,谢谢。正是我搜查的! –
你不能用继承来解决这个问题。如果Config
是Module
的子类,则其必须提供具有(至多)相同访问限制的Module
的所有功能。将一个子类想象为超类的专用版本:它可以完成超类的所有功能,可能更多,但不会更少。
不过您可以根据需要实现一个Config
类。刚刚跳过子类,而是使用Module
类型的私人领域,像这样:
class Config {
private Module module;
public Config() {
module = new Module();
}
public int SomeFunctionFromModuleYouWantToExpose() {
return module.SomeFunctionFromModuleYouWantToExpose();
}
// ...
}
所以'Config'类扩展'Module'类? –
是的。然后还有一些其他类只是扩展Module。但扩展配置的类扩展模块不应该能够覆盖onEnable –
您的要求不是很清楚,您能否重新定义问题和要求。如果可能的话提供一些代码 –