0

Javaでこのようなことをすることは可能ですか?

Object[] objArray = { new Car(), new Human() }

配列要素はすべて同じ型でなければならないことを読みましたが、これらはすべて Object 型ではありませんか?

4

5 に答える 5

3

はい、可能ですが、役に立たないことが多く、常に危険です。

いくつかのオブジェクトをコレクション (リストまたは配列) に入れたい場合、コレクションの型は共通の祖先を許可する必要があります。は Java のすべての OO 型の共通の祖先であるためObject、何でも入れることができます (Java 6 のオートボクシングでは、プリミティブさえも)。

問題は、リスト内の要素を操作するときに始まります。共通の祖先型が提供するメソッドのみを呼び出す必要がある限り、すべて問題ありません。

しかし、最終的には、その型のメソッドを呼び出したいと思うCarでしょう。つまり、コレクション内のインスタンスを識別し (これは、コードではやや遅く、かなり不器用です)、キャストを使用する必要があります (常に悪いコードの良い兆候です)。 .

于 2012-06-19T07:43:19.873 に答える
2

おっしゃるとおり、それは良い OO プラクティスとは見なされていませんが、まったく問題なく動作します。

于 2012-06-19T07:38:05.423 に答える
1

継承はis-a関係を定義するために使用されます。Java のすべてのクラスはjava.lang.Object(直接的または間接的に) 拡張されるため、Car インスタンスObject インスタンスであり、Human インスタンスObject インスタンスです。

したがって、もちろん、オブジェクトの配列には、人間、車、およびその他すべての種類のオブジェクトを保持できます。

于 2012-06-19T07:40:36.423 に答える
0

はい、可能です!Objectすべてのクラスの上位クラスなので

于 2012-06-19T07:48:34.487 に答える
0

はい、そのようなことを行うことは可能ですが、オブジェクト指向のようなものではありません。

オブジェクトにアクセスするときは、明示的なキャストを行うようにしてください。

Human h = (Human) objArray[1337];

楽しんで!

于 2012-06-19T07:40:24.283 に答える