-1

基本クラスとその子クラスの間のキャストについて質問があります。

(1) なぜこれが許されるのか?

BaseClass b = new ChildClassA();
ChildClassA c = (ChildClassA)b

(2) なぜ許されないのか?

ChildClassA c = (ChildClassA)new BaseClass();
BaseClass b = (BaseClass)c;

(3) なぜこれが許されるのですか?

BaseClass b = new BaseClass();
ChildClassA c = (ChildClassA)c;

(4) なぜこれが許されるのですか?

ChildClassA c = new ChildClassA();
BaseClass b = (BaseClass)c;
4

6 に答える 6

1

(1) なぜこれが許されるのか? BaseClass b = new ChildClassA(); ChildClassA c = (ChildClassA)b

ChildClassA は BaseClass であるためです。

(2) なぜ許されないのか? ChildClassA c = (ChildClassA)new BaseClass(); BaseClass b = (BaseClass)c;

BaseClass は ChildClassA ではないため

(3) なぜこれが許されるのですか? ChildClassA c = new ChildClassA(); BaseClass b = (BaseClass)c;

ChildClassA は BaseClass であるためです。

(4) なぜこれが許されるのですか? ChildClassA c = new ChildClassA(); BaseClass b = (BaseClass)c;

質問3と同じ。

継承されたクラスを作成すると、クラスはそのクラスの子であるため、基本クラスのインスタンスにキャストできます。ただし、基本クラス オブジェクトを使用して子クラスを作成しようとすると、基本クラスには子クラスのすべての情報が含まれていません。

子供は親のことを知っていますが、親は子供が何を持っているかを知りません。

于 2013-05-31T13:25:46.523 に答える
1

「である」という観点から考えてください。ChildClassA「is a」の任意のインスタンスを言うことができBaseClassますclass ChildClassA : BaseClass。しかし、その逆は当てはまりません。この場合BaseClass、「is a」のインスタンスを言うことはできませんChildClassA

次のようにコード行を読んでみてください。今回はより意味のあるものになると思います。

new ChildClassA()のインスタンスでありChildClassA、「である」でもありBaseClassます。したがって 、どのタイプに割り当てるnew ChildClassA()ことができますかbBaseClass

のインスタンスを実際に (ポイント) しているため、 にbキャストできます。ChildClassAChildClassA

「is not a」のインスタンスのため、new BaseClass()キャストできませんChildClassABaseClassChildClassA

于 2013-05-31T13:27:22.743 に答える
0

良い...

BaseClass(2) は許可されません。aを a にキャストできないためですChildClassA。インスタンスChildClassAも継承によってa になりますが、BaseClassその逆はできません!

于 2013-05-31T13:25:37.393 に答える
0
  1. b は実際に ChildClassA であるため、許可されます
  2. baseClass には childClass が機能するために必要な定義が含まれていないため、baseClass を childClass にキャストできないため、許可されていません
  3. ChildClass には BaseClass のすべての定義が含まれており、ChildClass IS A BaseClass 4.same as 3? であるため、許可されます。
于 2013-05-31T13:25:41.580 に答える
0

一般的に言えば、ChildClassA は BaseClass が知らないことを定義している可能性があるためですが、ChildClassA は BaseClass から派生しているため、それについてすべて知っています。

于 2013-05-31T13:25:55.480 に答える