繁体   English   中英

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

[英]How to prevent a subclass inherit a static method in the super class

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

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

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在不同的程序包中,则可能将其声明为private )。

但是即使这样,如果Child类具有使用反射的权限,则可以轻松地使用它来调用Parent类中的private方法。 因此,除非您将代码沙箱化,否则Java访问修饰符不是安全机制。

如果您有权访问超类,那么您是否只是将有问题的方法设为私有?

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

覆盖签名不执行任何操作。

  1. 如果您想让您的方法只能访问您的父类,则必须将方法设为私有
  2. 如果该方法必须限制包中的访问,则必须将其设置为defaul(无访问修饰符),例如:

      void hello(){ } 

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

希望这可以帮助 .....

如果您不希望子类继承超类的任何方法,请将该方法设为超类private

例如

班级家长{

私人void foo(){

}

}

子级继承父级{

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM