Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译时/运行时添加_Java - Fatal编程技术网

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
传递给重载方法。是的,就是这样,尽管最后一句话是不必要的。