이 실제는 캐스팅되지 않습니다. 다형성의 예입니다. 변수를 사용하면 다른 클래스와의 상속 관계를 기반으로 다른 유형을 사용할 수 있습니다.
예를 들어, 동물원을 시뮬레이트하기위한 프로그램을 작성한다고 가정합니다. Zoo
클래스와 Animal
클래스가 있습니다. Animal
클래스에서 확장되는 클래스는 Lion
, Zebra
및 Elephant
입니다.
그들은 즉, 다른 유형의 때문에 하나의리스트에 함께 그룹화 이러한 모든 개체를 유지하기 위해 매우 유용 할 수 있지만 다음과 같습니다 Lion
는, 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);
}
}
희망.
그게 합리적이긴하지만 주된 방법으로 내가 대신 쓰면 'Animal l = new Lion ("Larry"); 동물 e = 새로운 코끼리 ("엘리"); 동물 z = 새로운 지브라 ("Zayne"); ' 어떤 새로운 기능이 있습니까? –
@ Hubrid 당신이 제공하는 기능은 모두 다른 유형을 가지고 있지만 같은 목록이나 컨테이너에 모든 개체를 저장할 수 있다는 것입니다. –
나는 Animal 오브젝트를 만들 수있는 올바른 방법이라는 것을 안다. 나는 왜 Animal l = new Lion ("Larry")이''Lion l = new Lion (" 래리 "); –