我有一个名为Module
的类,它有一个方法onEnable();
现在我有一个名为Config
的课程,并希望制作onEnable();
方法private
,因为有一个预定义的表演和一个扩展Config
的课程不应该被允许更改行为。
有没有办法做到这一点?
实施例
class Module{
public void onEnable(){
}
}
允许使用onEnable
的类扩展模块:
class HelloWorldModule{
@Override
public void onEnable(){
System.out.println("Hello, World!");
}
}
现在是config类,我希望onEnable
是私有的,这样扩展Config的类就不行了!覆盖onEnable
:
class Config{
@Override
private void onEnable(){
}
}
现在,一个名为ProgrammConfig
的扩展Config
的类无法覆盖onEnable
。
但是,这不起作用,因为您无法将public
方法覆盖为private
方法。
答案 0 :(得分:2)
通过将方法声明为public
,您说应该可以在此类的每个实例上调用所述方法,包括子类。在子类中将方法声明为private
是没有意义的,因此是不允许的。
现在,如果您担心子类重写该方法,您可以将该方法声明为final
以防止这种情况:
class Config extends Module{
@Override
public final void onEnable(){}
//Whatever
}
答案 1 :(得分:0)
您无法使用继承来解决此问题。如果Config
是Module
的子类,则必须提供Module
的所有函数(最多)具有相同的访问限制。将子类视为超类的专用版本:它可以完成超类所能做的所有事情,可能更多,但永远不会更少。
您仍然可以根据需要实施Config
课程。只需跳过子类化,而是使用Module
类型的私有字段,如下所示:
class Config {
private Module module;
public Config() {
module = new Module();
}
public int SomeFunctionFromModuleYouWantToExpose() {
return module.SomeFunctionFromModuleYouWantToExpose();
}
// ...
}