2011-04-09 1 views
0

は声明Javaで多態性を説明できますか?

A m = new B(); 

を考えると、そのクラスBを知ることは、クラスAのサブクラスであり、Aは、 文が評価されたときに何が起こるかを説明Objectのサブクラスです。

事前に感謝します。

+11

コンパイラはあなたの質問に「宿題」タグを追加していないと訴えています。 – Mehrdad

+0

この宿題ですか、それとも何が起こるのか不思議ですか? –

+2

実際に過去の試験紙ですが、私はそれに取り組む方法がわかりません。 – EOS

答えて

0
  • タイプA
  • mが作成されるという変数、タイプBのオブジェクトが構成されている変数mが作成されたオブジェクト

への参照を割り当てられ

  • あなたを参照することができmのように、キャストのないタイプAのようです。つまり、Aで定義されているメソッドを呼び出すことができます。オーバーライドされている場合は、Bのメソッドのバージョンが代わりに呼び出されます。ただし、キャストを使用しない限り、Bに固有のメソッドを呼び出すことはできません。

  • 1

    最も単純な答えは、BがAのサブクラスであるため、この評価が正常に行われるということです。

    派生クラスが基本クラスのインスタンスであるため、基本クラスへのポインタは派生クラスを指すことができます。

    はのは、もう少し例を拡張してみましょう:

    A m; 
    B n = new B(); 
    m = n; // Valid statement 
    

    メートル= nは、我々は唯一メートルにオブジェクトを割り当てることができるため、有効なステートメントです。コンパイラはBがAから派生していることを認識しているので、実際はAオブジェクトです。関係のないタイプの場合、コンパイラはあなたに叫ぶだろう。

    +0

    はい、あります。私は彼がJavaが理解し、タイプBをAにキャストするメカニズムを望んでいると思う。 –

    +0

    私は、サブクラスのタイプのオブジェクトがスーパークラスによって提供されるタイプを使用して作成できることを知っている。それ(コンパイルの詳細など) – EOS

    +0

    @ EOS:そうではありません。私は私の答えにもう少し追加しましたが、この声明ではほとんど進んでいません。 –

    0

    RTTIです。実行時型の識別。
    Bruce Eckelの "Thinking in Java"をお勧めします。

    関連する問題