2017-04-08 12 views
-2

子クラスの参照変数が親のオブジェクトを参照できないのはなぜですか?私たちはその逆 を行うことができますしかし、すなわちサブクラス型の変数に親クラスを割り当てることができないのはなぜですか?

Child obj = new Parent(); 

は親切メモリとは何かを持っていない理由はありませんメモリビュー(ヒープ)

+0

これはメモリとは関係ありません。 –

+2

オブジェクトの種類には階層的な関係があります。すべての「犬」は「動物」ですが、すべての「動物」は「犬」ではありません。 –

答えて

1

と答えます。はるかに簡単です。サブクラスは、新しいメソッドを追加することによってスーパークラスの動作を拡張することができます。それが与えられていない間は、スーパークラスはそのサブクラスのすべてのメソッドを持っています。以下の例を見てみましょう:

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 

ChildParentのサブクラスであり、したがってparentMethod()を継承。だからあなたはこのメソッドをうまく呼び出すことができます。

+0

ありがとうSilverNak^_ ^ –

関連する問題