从超类

时间:2016-10-01 18:25:51

标签: java extend privileges access

我有一个名为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方法。

2 个答案:

答案 0 :(得分:2)

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

现在,如果您担心子类重写该方法,您可以将该方法声明为final以防止这种情况:

class Config extends Module{

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

答案 1 :(得分:0)

您无法使用继承来解决此问题。如果ConfigModule的子类,则必须提供Module的所有函数(最多)具有相同的访问限制。将子类视为超类的专用版本:它可以完成超类所能做的所有事情,可能更多,但永远不会更少。

您仍然可以根据需要实施Config课程。只需跳过子类化,而是使用Module类型的私有字段,如下所示:

class Config {
    private Module module;

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

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

    // ...
}