7

私はJavaが初めてで、次のコードについて2つの質問があります:

class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }
class Rat extends Animal { }

class Main {
  List<Animal> animals = new ArrayList<Animal>();

  public void main(String[] args) {
    animals.add(new Dog());
    animals.add(new Rat());
    animals.add(new Dog());
    animals.add(new Cat());
    animals.add(new Rat());
    animals.add(new Cat());

    List<Animal> cats = getCertainAnimals( /*some parameter specifying that i want only the cat instances*/ );
  }
}

1) Aminal リストから Dog または Cat インスタンスを取得する方法はありますか? 2) はいの場合、getCertainAnimals メソッドを正しく構築するにはどうすればよいですか?

4

2 に答える 2

2

次のようなことができます

    List<Animal> animalList = new ArrayList<Animal>();
    animalList.add(new Dog());
    animalList.add(new Cat());
    for(Animal animal : animalList) {
        if(animal instanceof  Dog) {
            System.out.println("Animal is a Dog");
        }
        else if(animal instanceof  Cat) {;
            System.out.println("Animal is a Cat");
        }
        else {
            System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal");
        }
    }

Animal のクラスを確認し、それを Animal サブクラスと比較することもできます。のように

for(Animal animal : animalList) {
    if(animal.getClass().equals(Dog.class)) {
        System.out.println("Animal is a Dog");
    }
    else if(animal.getClass().equals(Cat.class)) {;
        System.out.println("Animal is a Cat");
    }
    else {
        System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal");
    }
}

どちらの場合も、出力は次のようになります。

Animal is a Dog
Animal is a Cat

基本的にどちらもやることは同じです。理解を深めるためだけに。

于 2013-07-22T04:31:14.503 に答える