java - (Java) 如何从父类(super class)调用重写的 "inherited"方法?

标签 java class methods overriding inherited

我们直接看代码:

父亲.java:

public class Father {

    public void DoSmth(Father object) {
        // Do something else and print
        Print(object);
    }

    public void Print(Father object) {
        System.out.println("Father");
    }

}

Son.java:

public class Son extends Father {

    public void Print(Son object) {
        System.out.println("Son");
    }

}

Main.java:

public class Main {

    public static void main(String[] args) {

        Father o1 = new Father();
        Son o2 = new Son();

        o1.DoSmth(o1);
        o1.DoSmth(o2);

    }

}

所以,我想得到:

Father
Son

但是,我得到:

Father
Father

我真的不太明白为什么(对于o1.DoSmth(o2))它从Father类调用该方法,因为o2是Son类型。无论如何我可以获得想要的答案吗?

提前致谢

P.S.:实际上,我想从 Father 类内部调用(Son 类的)方法 Print。可能吗?

最佳答案

public void Print(Son object)不覆盖 public void Print(Father object) 。它重载了。

也就是说,DoSmth(Father object)在这两种情况下都在 Father 上执行实例,所以它会调用 public void Print(Father object)Father类即使Son类确实覆盖了它。

如果您更改Son类方法:

@Override
public void Print(Father object) {
    System.out.println("Son");
}

并更改您的 main至:

public static void main(String[] args) {
    Father o1 = new Father();
    Son o2 = new Son();

    o1.DoSmth(o1);
    o2.DoSmth(o2);
}

您将得到输出

Father
Son

关于java - (Java) 如何从父类(super class)调用重写的 "inherited"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506288/

相关文章:

Android加速度计类

java - 错误找不到符号 - Java 类和方法

swift - 如何覆盖子类中的数组 var?

java - 更改和删除按钮的方法

java - 方法的正确写法

java - 异步任务没有被取消

java - Netbeans 中的 J2me : How can I align my list items from right to left?

JavaFX setCellFactory 未设置我的项目

java - Spring 3.2 中的 AsyncRestTemplate.exchange 等效项

JavaScript 对象 : a function or method in an attribute