1

私のコードは

class Alpha
{
public void foo()
    {
    System.out.print("Alpha ");
    }
}

class Beta extends Alpha
{
public void foo()
    {
    System.out.print("Beta ");
    }

public static void main(String[]args)
   {
    Alpha a = new Beta();
    Beta b = (Beta)a;

    a.foo();
    b.foo();
   }
}

出力:-

Beta Beta

私はJavaが初めてで、この種のインスタンス化に初めて出くわしました。そのため、出力がそうでない理由を理解できません

Alpha Beta

「a」がクラス Alpha のオブジェクトである場合、Alpha のメソッドが呼び出されないのはなぜですか?

私を助けてください。

4

5 に答える 5

1

Betaによって作成された方法であるため、作成されるオブジェクトは typenewです。したがって、foo()が呼び出されると、Betaコード内で何を「呼び出し」ても、オブジェクトで動作します。

于 2012-08-08T18:36:08.970 に答える
1

オブジェクトをそのスーパークラスとしてキャストまたは参照しても、メソッドのオーバーライドは解除されません。このfoo()メソッドはBeta、元々オブジェクトとして参照していたとしても、まだオブジェクトに対して呼び出されていますAlpha

于 2012-08-08T18:36:16.883 に答える
0

Java では、メソッドはデフォルトで仮想です。実際に呼び出すメソッドを決定するときは、オブジェクトへの参照の型ではなく、基になるオブジェクトの型が重要です。

于 2012-08-08T18:39:07.923 に答える
0

親クラス変数が子クラス オブジェクトを参照する場合、その参照は子メソッドを呼び出します。

于 2012-08-08T18:36:38.320 に答える
0

Beta タイプのオブジェクトが 1 つだけあります。オブジェクトをキャストしても、java は親メソッドを使用しません。

于 2012-08-08T18:37:20.893 に答える