Java 多态性顶层方法称为

Java polymorphism top level method is called

提问人:Austin 提问时间:11/3/2023 更新时间:11/3/2023 访问量:46

问:

我在 java 项目中有一个继承的对象,我正在尝试在子对象中调用重写的方法。出于某种原因,正在调用该方法的父版本。我对多态性的理解是,方法的最低版本总是被称为。为什么要调用父版本?

public class Generator
{
    public static void acceptPending()
    {
        System.out.println("top level is called");
    }
}

public class GeneratorNeo extends Generator
{
    public static void acceptPending()
    {
        System.out.println("neo level is called");
    }
}

public class Driver()
{
    public static void main(String[] args)
    {
        Generator gen = null;
        gen = new GeneratorNeo();
        gen.acceptPending(); // prints top level is called
    }
}
Java 继承 多态 性覆盖

评论

3赞 MadProgrammer 11/3/2023
如果我没记错的话,你不能覆盖静态方法 - 尝试将@Override注释添加到子类方法中,看看你得到了什么

答:

5赞 Ahmed Nabil 11/3/2023 #1

acceptPending 是一个静态方法,静态方法是根据对象的编译时类型(即 Parent 类型)调用的。与实例方法不同。

因此,从这两个类中删除静态关键字将为您提供预期的行为。