Java中的意外输出 - 与继承有关

Und*_*Dog 0 java

这是我的示例程序.

class parent
{

    void display(int i)
    {
        System.out.println("parent");
    }

}

class child extends parent
{

    void display(byte i)  //Line 0
    {

        System.out.println("child");
        return;
    }

}

class impl
{

    public static void main(String...args)
    {

        parent p = new parent();
        p.display(5); //Line 1
        child c = new child();
        c.display(3); //Line 2

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的输出.

varun@\:~/Desktop/JavaFiles$ java impl
parent
parent
Run Code Online (Sandbox Code Playgroud)

我理解第1行从父级调用display()方法并输出预期的"parent".

但是我不明白为什么第2行从父节点而不是子节点调用display(),即使我没有使用多态初始化(只是常规初始化子类是我做的).

tsk*_*zzy 5

display(byte)在方法child不会覆盖display(int)的方法parent.并且由于默认情况下为3 int,因此您将调用显示方法parent.

尝试 c.display((byte)3)