Java 编译时/运行时添加
Java 编译时/运行时添加,java,Java,xz=新的Y()意味着在编译时它将把z当作类X的实例,但在运行时当作类Y的实例 那么为什么是:z.method((字节)0+(字符)0)在运行时处理?这不只是两个常量的总和吗,所以它可以在编译时而不是运行时确定吗 class X { void method(int x) { System.out.println("X:int"); } } class Y extends X { void method(int x) { System.out.println("Y:int");
xz=新的Y()
意味着在编译时它将把z
当作类X
的实例,但在运行时当作类Y
的实例
那么为什么是:z.method((字节)0+(字符)0)代码>在运行时处理?这不只是两个常量的总和吗,所以它可以在编译时而不是运行时确定吗
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
我看不出添加内容有什么关系。在X中有一个add()方法,该方法将int作为参数。此方法在Y中被重写。z
引用了具体类型为Y的对象,因此调用Y中的重写方法。这只是普通的多态性。给新手的提示:你应该事先做研究。尤其是当您刚刚来到这里/来到java时:很有可能您不是第一个问这个问题的人。所以在花15分钟写一个好问题之前,只花几分钟来检查这个问题以前是否被问过。我知道,但是我怎么知道所有适用的术语呢?我不知道为什么修订历史不再向其他人显示它:最初的问题是关于将null
传递给重载方法。是的,就是这样,尽管最后一句话是不必要的。