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
答案 0 :(得分:1)
我没看到添加是如何相关的。在X中有一个方法add(),以int作为参数。在Y中重写此方法。z
引用具体类型为Y的对象,因此调用Y中的重写方法。这只是普通的旧多态性。