1. 다형성(Polymorphism)이란?
1) 여러가지 형태를 가질 수 있는 것
2) 하나의 메소드나 클래스가 있을 떄 이것들이 다양한 방법으로 동작하는 것
3) 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
즉, 조상타입의 참조변수로 자손타입(상속관계)의 객체를 다룰 수 있는 것이
다형성의 기본 개념이다.
2. 다형성 구현 방법
바로 예시를 들어 설명하겠다.
ex)
class Animal{
public void move(){
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal{
public void move(){
System.out.println("사람이 두 발로 뜁니다.");
}
}
class Tiger extends Animal{
public void move(){
System.out.println("호랑이가 네 발로 뜁니다.");
}
}
class Eagle extends Animal{
public void move(){
System.out.println("독수리가 날아갑니다.");
}
}
class AnimalTest
{
public static void main (String[] args) throws java.lang.Exception
{
Animal human = new Human();
Animal tiger = new Tiger();
Animal eagle = new Eagle();
AnimalTest test = new AnimalTest();
test.moveAnimal(human);
test.moveAnimal(tiger);
test.moveAnimal(eagle);
}
public void moveAnimal(Animal animal){
animal.move();
}
// [출력]
// 사람이 두 발로 뜁니다.
// 호랑이가 네 발로 뜁니다.
// 독수리가 날아갑니다.
}
위의 코드를 보면 알 수 있듯이 Human, Tiger, Eagle이라는 각각의 클래스들이 Animal이라는 부모 클래스를 상속받고 있다. 그리고 Animal에 있는 move 메소드에 접근할 수 있기 위해, Animal human = new Human(); 와 같은 생성자를 만들어 주었다. 이때 Human animal = new Animal(); 와 같은 구문은 적용이 안 되는데, 그 이유는 부모와 자식의 각 메모리 영역이 다르기 때문이다. 후자와 같이 생성자를 정의하면 Animal이 가지고 있는 메모리 영역이 적어 Human의 영역까지 이를 수 없다.
그런데 우리가 출력하고 싶은 것은 동물의 움직임이 아니라 사람, 호랑이, 독수리의 움직임이다. 그래서 자식 클래스에서 부모와 같은 이름의 메소드, 즉 move()를 재정의해 주었다. 이때 Animal이라는 부모 클래스에서 사용된 move와 같은 함수를 Virtual Method라고 한다. 다시 말해, 동물원이라는 추상적인 개념을 생성한 다음 그 안에 있는 동물들을 관리하는 것처럼, 다형성은 상속에서 부모 클래스에 존재하는 메소드를 자식 클래스에서 여러 형태로 바꿔가면서 사용하고자 할 때 쓰이는 개념이다.
'JAVA' 카테고리의 다른 글
자바 (Collection Framework) (0) | 2022.02.23 |
---|---|
자바_커피 머신 구현 (0) | 2022.02.22 |
자바 기초(상속) (0) | 2022.02.21 |
자바스크립트 기초(내장 객체) (0) | 2022.02.18 |
자바 기초(배열) (0) | 2022.02.18 |