考虑到一些安全问题,我不希望子类从其超类继承静态方法,甚至不调用此方法,我该怎么做?请帮忙!
答案 0 :(得分:3)
静态方法不是以与实例方法相同的意义继承的。如果将静态方法声明为public(或包private),则无论子类中是否存在本地重新声明,都可以访问它。本地重新申报仅仅意味着子类必须符合方法的名称; e.g。
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
(或者如果{{1 }}和Child
位于不同的包中。)
但即便如此,如果Parent
类有权使用反射,那么它可以轻松地使用它来调用Child
类中的private
方法。因此,除非您对代码进行沙盒处理,否则Java访问修饰符不是安全机制。
答案 1 :(得分:2)
如果您有权访问超类,那么您是否只是将该方法设为私有?
答案 2 :(得分:2)
由于静态方法基本上是可以在任何地方生活的浮动代码,因此将方法移动到另一个(实用程序)类
答案 3 :(得分:1)
覆盖签名以不执行任何操作。
答案 4 :(得分:0)
如果方法必须限制您必须在包中进行访问 它作为默认(无访问修饰符)例如:
void hello(){
}
即使子类无法在包外部访问此方法(但请记住,同一包中的子类可以访问此方法)
希望这会有所帮助.....
答案 5 :(得分:0)
如果您不希望您的子类继承超类的任何方法,请在超类私有中创建该方法。
例如
Class Parent {
private void foo(){
}
}
class Child扩展Parent {
}
在这种情况下,由于可见性级别是私有的,因此子类甚至不能看到超类中存在名为foo()的方法,因为它从未被继承过。