A m = new B();
を考えると、そのクラスBを知ることは、クラスAのサブクラスであり、Aは、 文が評価されたときに何が起こるかを説明Objectのサブクラスです。
事前に感謝します。
A m = new B();
を考えると、そのクラスBを知ることは、クラスAのサブクラスであり、Aは、 文が評価されたときに何が起こるかを説明Objectのサブクラスです。
事前に感謝します。
A
m
が作成されるという変数、タイプB
のオブジェクトが構成されている変数m
が作成されたオブジェクトへの参照を割り当てられ
m
のように、キャストのないタイプA
のようです。つまり、A
で定義されているメソッドを呼び出すことができます。オーバーライドされている場合は、B
のメソッドのバージョンが代わりに呼び出されます。ただし、キャストを使用しない限り、B
に固有のメソッドを呼び出すことはできません。最も単純な答えは、BがAのサブクラスであるため、この評価が正常に行われるということです。
派生クラスが基本クラスのインスタンスであるため、基本クラスへのポインタは派生クラスを指すことができます。
はのは、もう少し例を拡張してみましょう:
A m;
B n = new B();
m = n; // Valid statement
メートル= nは、我々は唯一メートルにオブジェクトを割り当てることができるため、有効なステートメントです。コンパイラはBがAから派生していることを認識しているので、実際はAオブジェクトです。関係のないタイプの場合、コンパイラはあなたに叫ぶだろう。
はい、あります。私は彼がJavaが理解し、タイプBをAにキャストするメカニズムを望んでいると思う。 –
私は、サブクラスのタイプのオブジェクトがスーパークラスによって提供されるタイプを使用して作成できることを知っている。それ(コンパイルの詳細など) – EOS
@ EOS:そうではありません。私は私の答えにもう少し追加しましたが、この声明ではほとんど進んでいません。 –
RTTI
です。実行時型の識別。
Bruce Eckelの "Thinking in Java"をお勧めします。
コンパイラはあなたの質問に「宿題」タグを追加していないと訴えています。 – Mehrdad
この宿題ですか、それとも何が起こるのか不思議ですか? –
実際に過去の試験紙ですが、私はそれに取り組む方法がわかりません。 – EOS