【发布时间】:2018-08-15 16:36:51
【问题描述】:
试图从一本关于方法覆盖的书中研究一个例子。 该代码有两个类 Veggies 和 Pumpkin。我唯一的困惑是如果将南瓜的对象分配给 myveggie 对象,为什么它调用 veggies 类的方法,因为该对象来自派生类。 我确信这与静态方法有关,但我可以得到更清晰的想法。
class Veggies {
public static void staticMethod(){
System.out.println("Veggies static method");
}
public void instancemethod(){
System.out.println("Veggies instance method");
}
}
public class Pumpkin extends Veggies{
public static void staticMethod(){
System.out.println("Pumpkin static method");
}
@Override
public void instancemethod(){
System.out.println("Pumpkin instance method");
}
public static void main(String[] args) {
Pumpkin myPumpkin=new Pumpkin();
Veggies myveggie=myPumpkin;
myveggie.staticMethod();
myveggie.instancemethod();
}
}
【问题讨论】:
-
任何理智的 IDE 都会警告您将静态方法调用为实例方法。
-
静态方法是相对于类而不是实例的方法。在我看来,你永远不应该在实例上调用静态方法(即我会将
myveggie.staticMethod()替换为Veggies.staticMethod()),这很令人困惑 -
我认为内部类有问题,如果将它们分成两个不同的类,它会正常工作
-
对不起,这似乎是一个内部类。我编辑了它。
-
我得到了答案,仇恨者可以继续投票。
标签: java overriding static-methods