Java noob这里有一个简单的问题。
这是我将要使用的课程的基本布局。
public class Foo{
public static void Method1(){
Method 2();
}
public static void Method2(){
}
}
这是一个子类。
public class Foo2{
public static void Method2(){
}
}
如何编写此内容,以便调用Foo2.Method1()
使用Foo2.Method2()
代替Foo1.Method2()
?
答案 0 :(得分:3)
唯一的方法是在Method1
中创建Foo2
,这将调用Foo2.Method2
。无论进一步的子类化如何,Foo.Method2
始终会调用Foo.Method1
为静态。在静态方法方面,没有任何重写。
答案 1 :(得分:3)
静态方法不是多态的,因此没有动态调度。因此解决方案是
Method2
非静态以激活动态分派或Method1
或Foo2
有关静态方法的详细信息:这些是类级别的方法,因此
Foo2
中定义它们,那么您将隐藏在Foo
中的实现。Method1
那样在实例上调用它们。如果你以传统的方式Foo.Method2
对它们进行破解,那么问题和可能的解决方案就显而易见了。 答案 2 :(得分:0)
继承和方法重载/覆盖仅适用于类的非静态部分。因此,没有办法做你想要的。这也是static
尽可能少使用的原因 - 它无法扩展。