如何防止子类继承超类中的静态方法



考虑到一些安全问题,我不希望子类从它的超类继承静态方法,甚至不调用此方法,我该怎么做?请帮忙!

静态方法的继承意义与实例方法不同。 如果将静态方法声明为公共(或包私有),则无论子类中是否存在本地重新声明,都可以访问它。 本地重新声明仅意味着子类必须限定方法的名称;例如

public class Parent {
    public static void foo() { ... }
}
public class Child {
    public static void foo() { ... }
    public static void main(String[] args) {
        foo();  // calls local override
        Parent.foo(); // calls original version.
}

如果不希望 Child 类能够调用 Parent.foo 方法,则需要将其声明为 private(或者如果 ChildParent 位于不同的包中,则可能是包私有的。

但即便如此,如果 Child 类有权使用反射,那么它可以轻松地使用它来调用 Parent 类中的 private 方法。 因此,除非您对代码进行沙盒化,否则 Java 访问修饰符不是一种安全机制。

如果您可以访问超类,您不就是将有问题的方法设为私有吗?

由于静态方法基本上是可以在任何地方存在的浮动代码,因此请将该方法移动到另一个(实用程序)类

重写签名以不执行任何操作。

  1. 如果您希望您的方法只能由您的父类访问,则必须使您的方法保密
  2. 如果该方法必须限制对包中的访问,则必须使它作为 defaul(无访问修饰符) 例如:

     void hello(){
    }  
    

    即使一个子类不能在包外访问此方法(但请记住,同一包中的子类可以访问此方法)

希望这有帮助.....

如果不希望

子类继承超类的任何方法,请将超类中的方法设为私有

例如

类父{

private void foo(){

}

}

类子扩展父{

}

在这种情况下,由于可见性级别是私有的,因此子类甚至无法看到超类中是否存在名为 foo() 的方法,因为它从未被继承过。

最新更新