다형성이란
먼저 예를 들자면 지금의 나는 아들이자 친구이자 학생인 것처럼
같은 이름을 하고 있지만 상황이나 맥락 등 여러 요건에 따라 다른 역할을 수행할 수 있는 특성이다.
대표적으로는 메소드 오버라이딩과 메소드 오버로딩이 있다.
public interface Phone {
public abstract void TurnOff();
public abstract void TurnOn();
// 폰마다 벨소리는 다를 수 있다.
public abstract void Call();
}
public class AndroidPhone implements Phone{
//안드로이드 폰 벨소리
@Override
public void Call(){
System.out.println("빰~ 빠밤 빰~ 빰 바빰 빰 밤");
}
}
public class IPhone implements Phone{
// 아이폰 벨소리
@Override
public void Call(){
System.out.println("딴 딴딴딴 딴딴딴딴 딴딴딴딴 딴");
}
}
좀 더 객체 지향적으로 다형성을 설명하면
- 한 타입 변수로 여러 타입들을 참조할 수 있다는 것이다.
- 자바는 다중 상속이 안돼서 부모의 수 <<< 자식의 수 이기 때문에 이 둘을 합치면
- 부모클래스 타입으로 그 아래의 여러 자식클래스를 참조 할 수 있다.
- 또한 이 개념을 이용하면 부모클래스 타입의 배열로 여러 자식클래스들을 다룰 수 있다.
첫 부분의 예를 활용하면 부모클래스는 "지금의 나" , 자식클래스는 "자식,친구,학생"이 되겠다.
// 부모 클래스 , "한 타입"을 담당
public class Phone {
void Call(){
System.out.println("신호가 가는 중 입니다.");
};
void TurnOff(){
System.out.println("전원을 종료합니다.");
};
void TurnOn(){
System.out.println("전원을 켭니다.");
};
}
// 자식클래스들 , "여러타입들"을 담당
class AndroidPhone extends Phone{
@Override
void TurnOn() {
System.out.println("안드로이드 온");
}
}
class IPhone extends Phone {
@Override
void TurnOn() {
System.out.println("Ios 온");
}
}
// 실행파일
class PhoneMain {
public static void main(String[] args) {
// 하나의 타입 Phone 으로 여러타입 AndroidPhone,IPhone 을 참조함
Phone a = new AndroidPhone();
Phone i = new IPhone();
// 부모클래스 배열을 이용해 자식클래스들을 다루는 법
Phone phones[] = new Phone[2];
phones[0]= new AndroidPhone();
phones[1]= new IPhone();
a.TurnOn();
i.TurnOn();
phones[0].Call();
phones[1].Call();
}
}
출력---------
안드로이드 온
Ios 온
신호가 가는 중 입니다.
신호가 가는 중 입니다.
'CS' 카테고리의 다른 글
오버라이드(@Override) (0) | 2023.03.29 |
---|---|
인터페이스( interface ) (0) | 2023.03.28 |
객체 지향의 대표 특징 3 : 캡슐화 (0) | 2023.03.28 |
객체 지향의 대표 특징 2 : 상속성 (0) | 2023.03.28 |
객체 지향의 대표 특징 1 : 추상화 (0) | 2023.03.28 |