다형성은 객체가 다양한 형태로 표현될 수 있다는 개념. 추상화된 객체와 같은 "틀"을 가진 객체가 구체화된 객체로 표현 가능하다고 해석할 수 있다
부모 클래스를 활용하여 자식의 객체를 제어할 수 있다는 뜻
부모가 S/W회사이고 자식이 회사A,B,C이다.
각 회사는 S/W 회사라는 공통적인 개념에서 시작되었지만, 내부적으로는 각 회사의 특성에 맞게 조금씩 변화되어 만들어 질 수 있다.
다형성의 경우에는 "회사 A,B,C의 공통적인 개념은 S/W회사이다" 를 활용하는 것이다
다형성(Polymorphism)은 객체를 여러가지 형태로 변환하여 사용할 수 있는 기법으로, 상속 관계에 있는 클래스 간에 사용할 수 있다. 클래스에서 다형성을 사용할 때 부모 클래스의 객체를 사용하되 실제 메모리에 담기는 내용은 자식 클래스의 내용을 담는다
public class Main {
public static void main(String[] args) {
Animal animal_lion = new Lion("사자");
animal_lion.Growl();
Animal animal_cat = new Cat("고양이");
animal_cat.Growl();
//animal_cat.Udada(); 불가능합니다.
}
}
abstract class Animal {
String Name;
public Animal(String name) {
Name = name;
}
abstract public void Growl();
}
class Lion extends Animal {
public Lion(String name) {
super(name);
}
public void Growl() {
System.out.println("어흥");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void Growl() {
System.out.println("야옹");
}
public void Udada() {
System.out.println("UDADADA");
}
}
Animal animal_lion = new Lion("사자");
Animal animal_cat = new Cat("고양이");
여기서 다형성을 사용하고 있다. animal_lion과 animal_cat의 자료형은 Animal 클래스지만
객체를 초기화 할 때는 각각 Lion, Cat를 사용했다.
객체의 껍데기는 Animal 클래스를 사용했지만 실제로 객체에 저장되는 데이터는 Animal로부터 상속받은 Lion과 Cat클래스 데이터가.
주석은 데이터는 각각의 자식 클래스에 저장되지만 틀은 Animal 클래스 이기 때문에 사용할 수 없다.
Cat클래스에서 별로도 정의한 Udada메소드는 Animal 클래스에서 존재하지 않는 메소드다
따라서 Animal 클래스의 틀을 가지고 있는 animal_cat객체에서는 Udada메소드를 사용할 수 없다
다형성은 여러가지 케이스를 대응해야 할 때 자주 사용되는 기법이다. 상황에 맞게 객체를 바꿔서 만들어 사용할 수 있으며, 소스코드의 간결성과 재사용성을 높여주는 기법이다