【问题标题】:Java inheritance and subclassesJava继承和子类
【发布时间】:2011-10-09 19:25:42
【问题描述】:

Java 菜鸟在这里问一个简单的问题。

这是我将使用的类的基本布局。

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

【问题讨论】:

标签: java inheritance subclass


【解决方案1】:

唯一的方法是在Foo2 中也创建一个Method1,它将调用Foo2.Method2Foo.Method2 是静态的总是会被 Foo.Method1 调用,不管进一步的子类化。静态方法没有覆盖。

【讨论】:

    【解决方案2】:

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

    • 使Method2 非静态以激活动态调度或
    • 覆盖Method1隐藏在Foo2中或
    • 如果这会导致大量代码重复,请创建一个辅助方法来覆盖仅隐藏部分代码。

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

    • 您不能覆盖它们 - 如果您也在 Foo2 中定义它们,您将在 Foo 中隐藏实现。
    • 您不应像在Method1 中那样在实例上调用它们。如果您以传统方式调用它们,Foo.Method2,那么问题和可能的解决方案是什么就变得很明显了。

    【讨论】:

    • +1 至少暗示了为什么这个问题没有任何意义;-)
    【解决方案3】:

    继承和方法重载/覆盖仅适用于类的非静态部分。因此,没有办法做你想做的事。这也是为什么static应该尽量少用的原因——不能扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多