この実際はキャスティングとは呼ばれません。これはポリモーフィズムの例です。これにより、変数は他のクラスとの継承関係に基づいてさまざまな型をとることができます。
たとえば、動物園をシミュレートするプログラムを作成しているとします。と呼ばれるクラスとZoo
と呼ばれるクラスがありAnimal
ます。クラスから拡張するいくつかのクラスもありますAnimal
:Lion
、、、Zebra
およびElephant
。
これらのオブジェクトをすべて1つのリストにグループ化しておくと非常に便利ですが、タイプが異なるため、、、、およびLion
、を1つのリストに保存することはできないため、別のリストを維持する必要があります。動物の種類ごとに。ここでポリモーフィズムが作用します。Zebra
Elephant
各クラス、、、Lion
およびZebra
すべてがクラスElephant
から拡張されているためAnimal
、タイプのリストにそれらを簡単に格納できますAnimal
。
コード例:
public class Zoo
{
private List<Animal> animals;
public Zoo()
{
this.animals = new ArrayList<>();
}
//notice this method takes an Animal object as a parameter
public void add(Animal a)
{
this.animals.add(a);
}
}
public abstract class Animal
{
private String name;
private String type;
public Animal(String name, String type)
{
this.name = name;
this.type = type;
}
//all subclasses must implement this method
public abstract void speak();
}
public class Lion extends Animal
{
private String animalType = "Lion";
public Lion(String name)
{
super(name, animalType);
}
public void speak()
{
System.out.println("ROAR");
}
}
//....etc for the other two animals
public class TestZoo
{
public static void main(String[] args)
{
Zoo myZoo = new Zoo();
Lion l = new Lion("Larry");
Elephant e = new Elephant("Eli");
Zebra z = new Zebra("Zayne");
myZoo.add(l); //<-- note that here I don't pass Animal objects to the
myZoo.add(e); // add method but subclasses of Animal
myZoo.add(z);
}
}
ばかげた例でも、これが役立つことを願っています。