Javaでこのようなことをすることは可能ですか?
Object[] objArray = { new Car(), new Human() }
配列要素はすべて同じ型でなければならないことを読みましたが、これらはすべて Object 型ではありませんか?
Javaでこのようなことをすることは可能ですか?
Object[] objArray = { new Car(), new Human() }
配列要素はすべて同じ型でなければならないことを読みましたが、これらはすべて Object 型ではありませんか?
はい、可能ですが、役に立たないことが多く、常に危険です。
いくつかのオブジェクトをコレクション (リストまたは配列) に入れたい場合、コレクションの型は共通の祖先を許可する必要があります。は Java のすべての OO 型の共通の祖先であるためObject
、何でも入れることができます (Java 6 のオートボクシングでは、プリミティブさえも)。
問題は、リスト内の要素を操作するときに始まります。共通の祖先型が提供するメソッドのみを呼び出す必要がある限り、すべて問題ありません。
しかし、最終的には、その型のメソッドを呼び出したいと思うCar
でしょう。つまり、コレクション内のインスタンスを識別し (これは、コードではやや遅く、かなり不器用です)、キャストを使用する必要があります (常に悪いコードの良い兆候です)。 .
おっしゃるとおり、それは良い OO プラクティスとは見なされていませんが、まったく問題なく動作します。
継承はis-a関係を定義するために使用されます。Java のすべてのクラスはjava.lang.Object
(直接的または間接的に) 拡張されるため、Car インスタンスはObject インスタンスであり、Human インスタンスはObject インスタンスです。
したがって、もちろん、オブジェクトの配列には、人間、車、およびその他すべての種類のオブジェクトを保持できます。
はい、可能です!Object
すべてのクラスの上位クラスなので
はい、そのようなことを行うことは可能ですが、オブジェクト指向のようなものではありません。
オブジェクトにアクセスするときは、明示的なキャストを行うようにしてください。
Human h = (Human) objArray[1337];
楽しんで!