首页 > 解决方案 > Java中的静态和动态类型

问题描述

我有一个关于编译时类型(静态)和运行时类型(动态)类型的问题。据我了解,如果子类覆盖了超类的某个方法,那么在调用 Parent pTom = tom 之类的方法时,不得使用被覆盖的 pTom 方法,而必须实例化覆盖它的方法。

public class Parent {
    int x = 0;
    static void f() {
        System.out.println("Ahem");
    }
}

public class Child extends Parent {
    int x = 5;
    static void f() {
        System.out.println("No way!");
    }
    public static void main(String[] args) {
        Child tom = new Child();
        System.out.println(tom.x); //output is No way!
        Parent pTom = tom;
        pTom.f();
        System.out.println(pTom.x); //output is Ahem
   }
}

你能帮我澄清一下我的理解吗?

标签: javatypes

解决方案


推荐阅读