Java继承和子类

时间:2011-10-09 19:25:43

标签: java inheritance subclass

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()

3 个答案:

答案 0 :(得分:3)

唯一的方法是在Method1中创建Foo2,这将调用Foo2.Method2。无论进一步的子类化如何,Foo.Method2始终会调用Foo.Method1为静态。在静态方法方面,没有任何重写。

答案 1 :(得分:3)

静态方法不是多态的,因此没有动态调度。因此解决方案是

  • 使Method2非静态以激活动态分派或
  • 覆盖隐藏Method1
  • 中的Foo2
  • 如果这会导致大量代码重复,为重写创建一个帮助方法,只隐藏部分代码。

有关静态方法的详细信息:这些是类级别的方法,因此

  • 您无法覆盖它们 - 如果您也在Foo2中定义它们,那么您将隐藏在Foo中的实现。
  • 你不应该像在Method1那样在实例上调用它们。如果你以传统的方式Foo.Method2对它们进行破解,那么问题和可能的解决方案就显而易见了。

答案 2 :(得分:0)

继承和方法重载/覆盖仅适用于类的非静态部分。因此,没有办法做你想要的。这也是static尽可能少使用的原因 - 它无法扩展。