다형성이란?
다형성(Polymorphism)은 하나의 타입에서 여러 가지 타입으로 확장할 수 있는 성질을 말합니다.
다형성은 상속, 추상화와 더불어 객체지향 프로그래밍에서 중요한 특징 중 하나로, 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 생성만으로 타입 변경이 일어나게 할 수 있습니다.
이미지참고 : https://kadosholy.tistory.com/99
//Cat 클래스 (자식)
public class Cat extends Animal {
public void eat() {
System.out.println("고양이처럼 밥 먹는다");
}
}
//Dog 클래스 (자식)
public class Dog extends Animal{
public void eat() {
System.out.println("강아지처럼 먹어보자");
}
}
//Animal 클래스 (부모)
public class Animal {
public void eat() {
System.out.println("동물처럼 먹다");
}
}
//Override 클래스 (메인)
public static void main(String[] args) {
/*
Upcastiong(업캐스팅) -> 만약 다른 사람이 Dog클래스를 java 소스코드를 주지 않고,
class 파일만 주었을 때, Dog 클래스로 선언하기 어려움
Animal <---> Dog.class(o) Animal 클래스가 Dog클래스와 상속관계에 있다는 것을
알고있다는 가정하에 Override 통해 eat()을 재 정의 할 수 있게 됩니다.
*/
Animal ani = new Dog();
ani.eat();
// Animal ----실행시점에서 메서드가 결정되는 것(동적바인딩)---> Dog
// 작성 시에는 eat()가 Animal에 속해있는 것이라고 생각되어 에러가 나지 않았지만, 실행과 동시에 Dog의 eat()이 실행되게 됩니다 / 이를 동적바인딩이라고 합니다.
System.out.println("ani = " + ani); //실행결과 : 강아지처럼 먹어보자
}
}
[코드 참조] : https://coding-ha-da.tistory.com/34