从超类分配对方法覆盖的较弱访问

Assign weaker access to method overriding from superclass

我有一个名为 Module 的 Class,它有一个方法 onEnable(); 现在我有一个名为 Config 的 class 并且想要制作 onEnable(); 方法 private 因为有一个预定义的动作和一个 class 扩展 Config不应该允许改变行为。

有什么办法吗?

例子

class Module{

     public void onEnable(){

     }
}

一个class扩展模块允许使用onEnable:

class HelloWorldModule{

     @Override
     public void onEnable(){

          System.out.println("Hello, World!");

     }


}

现在配置 Class,我希望 onEnable 是私有的,这样扩展配置的 Classes 就不能了!覆盖 onEnable:

class Config{

    @Override
    private void onEnable(){
    }


}

所以现在,扩展 Config 的名为 ProgrammConfig 的 class 不能覆盖 onEnable.

但是,这不起作用,因为您无法将 public 方法重写为 private 方法。

你不能使用继承来解决这个问题。如果 ConfigModule 的子 class,那么它 必须 提供 Module 的所有功能(至多)相同访问限制。将 subclass 视为 superclass 的特殊版本:它可以做 superclass 可以做的一切,可能更多,但绝不会更少。

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

class Config {
    private Module module;

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

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

    // ...
}

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

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

class Config extends Module{

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