编译时间/运行时添加

时间:2016-06-16 12:25:15

标签: java

X z = new Y();表示在编译时它将z视为class X的实例,但在运行时将其视为class Y的实例。

那么为什么:z.method((byte)0 + (char)0);在运行时处理?这些仅仅是2个常量是否相加,因此可以在编译时确定,而不是运行时?

class X {
    void method(int x) { System.out.println("X:int"); }
}

class Y extends X {
    void method(int x) { System.out.println("Y:int"); }
}

public class Z {
    public static void main(String[] args) {
        X x = new X();
        X z = new Y();

        System.out.println("1:");
        z.method((byte)0 + (char)0);
    }
}

输出:

1:
Y:int

1 个答案:

答案 0 :(得分:1)

我没看到添加是如何相关的。在X中有一个方法add(),以int作为参数。在Y中重写此方法。z引用具体类型为Y的对象,因此调用Y中的重写方法。这只是普通的旧多态性。