分配从超

问题描述:

到方法覆盖较弱的访问我有一个名为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方法。

+0

所以'Config'类扩展'Module'类? –

+0

是的。然后还有一些其他类只是扩展Module。但扩展配置的类扩展模块不应该能够覆盖onEnable –

+0

您的要求不是很清楚,您能否重新定义问题和要求。如果可能的话提供一些代码 –

通过声明的方法为public,你说,它应该是可以调用这个类的每个实例所述方法,包括子类。在子类中声明一个方法为private没有意义,因此也是不允许的。

现在,如果你关心的子类覆盖方法,你可以声明的方法final防止这种情况:

class Config extends Module{ 

    @Override 
    public final void onEnable(){} 
     //Whatever 
    } 
+0

啊,谢谢。正是我搜查的! –

你不能用继承来解决这个问题。如果ConfigModule的子类,则其必须提供具有(至多)相同访问限制的Module的所有功能。将一个子类想象为超类的专用版本:它可以完成超类的所有功能,可能更多,但不会更少。

不过您可以根据需要实现一个Config类。刚刚跳过子类,而是使用Module类型的私人领域,像这样:

class Config { 
    private Module module; 

    public Config() { 
     module = new Module(); 
    } 

    public int SomeFunctionFromModuleYouWantToExpose() { 
     return module.SomeFunctionFromModuleYouWantToExpose(); 
    } 

    // ... 
}