子クラスの参照変数が親のオブジェクトを参照できないのはなぜですか?私たちはその逆 を行うことができますしかし、すなわちサブクラス型の変数に親クラスを割り当てることができないのはなぜですか?
Child obj = new Parent();
は親切メモリとは何かを持っていない理由はありませんメモリビュー(ヒープ)
子クラスの参照変数が親のオブジェクトを参照できないのはなぜですか?私たちはその逆 を行うことができますしかし、すなわちサブクラス型の変数に親クラスを割り当てることができないのはなぜですか?
Child obj = new Parent();
は親切メモリとは何かを持っていない理由はありませんメモリビュー(ヒープ)
と答えます。はるかに簡単です。サブクラスは、新しいメソッドを追加することによってスーパークラスの動作を拡張することができます。それが与えられていない間は、スーパークラスはそのサブクラスのすべてのメソッドを持っています。以下の例を見てみましょう:
public class Parent {
public void parentMethod() {}
}
public class Child extends Parent {
public void childMethod() {}
}
は、今のあなたがタイプChild
の変数にParent
のインスタンスを割り当てることができたらどうなるかを考えてみましょう。 c
ので
Child c = new Parent(); //compiler error
タイプChild
であり、方法childMethod()
の呼び出しを許可されています。しかし、実際にはこのメソッドを持たないParent
インスタンスであるため、コンパイル時または実行時の問題が発生します(チェックの実行時期によって異なります)。
は、クラスを拡張してメソッドを削除できないため、それ以外の方法で問題はありません。
Parent p = new Child(); //allowed
Child
Parent
のサブクラスであり、したがってparentMethod()
を継承。だからあなたはこのメソッドをうまく呼び出すことができます。
ありがとうSilverNak^_ ^ –
これはメモリとは関係ありません。 –
オブジェクトの種類には階層的な関係があります。すべての「犬」は「動物」ですが、すべての「動物」は「犬」ではありません。 –