1

DefaultItemsクラスに配列を作成すると、次のようになります。

DefaultItems[] items = new DefaultItems[20];

これを5つの異なるクラスオブジェクトのストレージ配列として使用したいと思います。Carオブジェクト、Personオブジェクト、Petオブジェクトを保存したい。

 DefaultItems[1] = Car Object;
 DefaultItems[2] = Person Object;

これは可能ですか?

4

3 に答える 3

1

CarからPerson派生した場合DefaultItems、コードは機能するはずです(タイプミスが修正されていると仮定します)。

Object[]クラスがまったく関連していない場合は、の代わりにを使用して、目的を達成できますDefaultItems[]。すべてのクラスはから派生しObjectます。

于 2012-10-27T01:12:38.433 に答える
0

5つのオブジェクトすべてが基本クラスから拡張されてCarいるPersonことを確認してくださいそうすれば、あなたはあなたが望むことを達成することができます。DefaultItems

すなわち

 public class Person extends DefaultItems {
   //...
 }

 public class Car extends DefaultItems {
   //...
 }

それから

 DefaultItems[] items = new DefaultItems[2];
 DefaultItems[0] = new Person();
 DefaultItems[1] = new Car();

Number次のようなクラスとそのサブクラスの1つの例:

    Number[] nums = new Number[3];
    nums[0] = new Integer(0);
    nums[1] = new Double(1.0);
    nums[2] = new Float(0.5);

    for(Number num: nums){
        System.out.println(num);//<--prints the numbers
    }
于 2012-10-27T01:12:27.770 に答える
0

配列に格納するすべてのオブジェクトが、それらが継承する共通の親クラスを共有している場合でも、タイプセーフな方法で可能です。

class Car extends MyObject {
  ...
}

class Person extends MyObject {
  ...
}

MyObject[] array = new MyObject[2];
array[0] = new Car();
array[1] = new Person();

ただし、それらを配列に追加した後は、MyObjectインスタンスと同じようにアクセスできます(型キャストしない限り、回避する必要があります)。したがって、MyObjectクラスが共通のインターフェイスを提供しない場合、これはまったく意味がありません。コンポジションを使用することをお勧めします。

class MyClass {
  Person person;
  Car car;
  ..
}
于 2012-10-27T01:12:36.827 に答える