다형성 이란?
하나의 코드가 여러 자료형으로 구현되어 실행되는 것
같은 코드에서 여러 실행 결과가 나온다.
정보은닉 , 상속 과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나이다
객체지향 프로그래밍의 유연성 , 재활용성 , 유지보수성에 기본이 되는 특징이다.
package polymorphism;
class Animal{
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal {
@Override // 오버라이딩
public void move() {
System.out.println("사람이 두발로 걷습니다.");
}
}
class Tiger extends Animal {
@Override
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
}
class Eagle extends Animal {
@Override
public void move() {
System.out.println("독수리가 하늘을 날아갑니다.");
}
}
public class AnimalTest {
public static void main(String[] args) {
// Animal 타입 하나만으로 각각 돌아갈 메소드들을 동일한 메소드로 호출할수있다.
Animal hAnimal = new Human();
Animal tAnimal = new Tiger();
Animal eAnimal = new Eagle();
AnimalTest test = new AnimalTest();
test.moveAnimal(hAnimal);
test.moveAnimal(tAnimal);
test.moveAnimal(eAnimal);
}
public void moveAnimal(Animal animal) { // 매개변수타입은 hAnimal tAnimal eAnimal 모두 Animal 타입이기때문에 Animal 로 타입을 정해주면 된다.
animal.move(); // 이게 바로 다형성 : 하나의 코드가 여러 자료형의 구현이 되서 다른실행이 이루어진다.
}
public void moveAnimal(Human animal) {
// 오버로딩 같은메소드인데 매개변수타입을 다르게 하면 이걸 세개를 만들어야된다. 다형성의 장점이다.
animal.move();
}
}
하위클래스에서 상위클래스로 업캐스팅 한후 모두 Animal 타입이기때문에
move() 메소드를 호출하기위한 메소드 moveAnimal 매개변수를 Animal animal 로 줬다.
animal.move() 함수를 실행함으로써 하나의 코드가 여러 자료형으로 구현이 되서 다른실행이 이루어진다
이게 바로 다형성이다. 즉 Animal 타입 하나만으로 각각 돌아갈 메소드들을 동일한 메소드로 호출할수있다.
'JAVA Programming' 카테고리의 다른 글
[39] 추상 클래스 abstract class , 상속 하위클래스 구현 (0) | 2020.07.16 |
---|---|
[37] 다운캐스팅 과 instanceof (0) | 2020.07.16 |
[35] 메소드 오버라이딩 , 업캐스팅되면 과연어떤게 호출? 가상테이블 (0) | 2020.07.15 |
[34] 상속에서의 묵시적 형변환 ( 업캐스팅 ) (0) | 2020.07.15 |
[33] 상속에서의 super() 상위 부모 생성자 호출 (0) | 2020.07.15 |