0

これは私のサンプルプログラムです。

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

    }

}

これが私の出力です。

varun@\:~/Desktop/JavaFiles$ java impl
parent
parent

行 1 が親から display() メソッドを呼び出し、期待される「親」を出力することを理解しています。

しかし、ポリモーフィックな初期化を使用していないにもかかわらず、行 2 が子ではなく親から display() を呼び出す理由がわかりません (子クラスの通常の初期化だけが私が行ったことです)。

4

5 に答える 5

5

display(byte)メソッドは のメソッドをオーバーライドしませchildん。3 はデフォルトで であるため、 で display メソッドを呼び出します。display(int)parentintparent

試すc.display((byte)3)

于 2013-08-31T15:46:04.913 に答える
4

子クラスで宣言したメソッドは、親クラスのメソッドをオーバーライドしません。1 つはint引数を取り、もう 1 つは を受け取りbyteます (子クラス メソッドに追加することでこれをテストでき@Overrideます。コンパイル エラーが発生します)。メインメソッドでは、引数display()を渡して呼び出しているため、親クラスのメソッドが呼び出されます。int

子クラスで宣言されているように呼び出したい場合は、明示的に引数display()を渡す必要があります。byte

c.display((byte)3);
于 2013-08-31T15:45:28.340 に答える
0

あなたはクラスoverloadingdisplay()中で、ではありません。 ChildOverriding

ルールのオーバーライド

1 引数は変更してはなりません
2 戻り値の型 共変 (サブタイプ) の戻り値以外は変更できません
3 例外 削減/削除できます。新しい/より広範なチェック例外をスローして
はなりません 3 アクセス より制限的であってはなりません。制限を緩和できます。
4 呼び出し どのメソッドを呼び出すかは、実行時にオブジェクト タイプに基づきます

于 2013-08-31T15:48:40.480 に答える
0

何の継承???子ディスプレイはバイトを取り、親ディスプレイが呼び出されるように int を渡します。

于 2013-08-31T15:46:50.593 に答える
0

パラメーター 3 は、バイト型ではなく int と見なされます。

于 2013-08-31T15:50:23.440 に答える