2

Fish というスーパークラスと Tuna というサブクラスがあるとします。なぜこれが機能するのかわかりません:

Fish f;
Tuna t = new Tuna();

f=t;  // I am confused about this statement
f.swim();  // (Tuna's swim method is invoked)

なぜ fish 変数は、より専門的な Tuna オブジェクトに「関与する」ことが許可されているのですか? 私の明らかに間違った「noob OOP Java頭脳」が機能する方法は次のとおりです。

「まぐろ」は「魚」でOKです。魚は「まぐろはダメ」です。したがって、f=t は OK ではなく、t=f は OK のはずです。しかし、上記の私の例からすると、その逆が当てはまります。

これについて何か助けてくれてありがとう。Javaの学習を始めたばかりなので、無知で申し訳ありません。

編集します。以下のすべての返信に感謝します。それらから、私は今次のことを理解しています:

f という変数は Fish 型であり、t という変数内にあるデータ値 (オブジェクト参照) を含むことができます。t は Tuna オブジェクトを参照するため、f が使用する互換性のある型です。 . マグロは魚だから相性がいい。

4

3 に答える 3

2

あなたは近いですが、たった 1 つのステートメントで間違っています。

まぐろは「お魚はOK」

同意します-これは、ステートメント f=t (fish=tuna) が正しいことを意味します。

魚は「マグロはダメ」

同意します-これは、ステートメント t=f(tuna=fish) が正しくないことを意味します。

. したがって、f=t は OK ではなく、t=f は OK であるはずです。

上記のあなたの声明のために、あなたは反対のことを言ったので、私は同意しません。前回の引用で、すべての魚はマグロ (t=f) であり、すべてのマグロが魚 (f=t) であるとは限らないと言いましたが、それは明らかに間違っています。

マグロが魚なら、どんなマグロも魚になるから、F=T よりも。でも、すべての魚がマグロだとは言えませんよね?

=これは等価を意味するものではないことを覚えておく必要があります ( ==Java では等価です)。理解を深めるために、これらのステートメントを右から左に読んでみてください。

于 2013-10-24T06:41:16.653 に答える