다형성이란?
그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로,
프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이
다양한 자료형(type)에 속하는 것이 허가되는 성질
참고 : https://ko.wikipedia.org/wiki/다형성(컴퓨터과학)
⇒ 어떤 것을 이렇게도 볼수 있고, 저렇게도 볼 수 있는 것
- 핸들이 있고, 오른 페달이 엑셀, 왼쪽이 브레이크인 것 = 차, 그랜저, 버스 등…
세부적인 부분은 다르지만, 어쨌든 대충 보면 그냥 차다
abstract class Person {
String name;
int age;
Person(this.name, this.age);
void hello();
}
class Korean extends Person {
String nation = "Korea";
Korean(super.name, super.age);
@override
void hello () {
print("안녕하세요.");
}
}
main() {
Korean nouveau = Korean("nouveau", 20);
nouveau.hello();
Person yongyeon = Korean("yongyeon", 20);
yongyeon.hello();
}
정리
인스턴스를 애매하게 퉁치기
- 상속에 의한 is-a 관계가 성립한다면, 인스턴스를 부모 클래스 타입의 변수에 대입할 수 있다
- 부모 클래스 타입 변수에 대입하는 것으로, 퉁 칠 수 있음
상자의 타입 과 내용의 타입 의 역할
- 어떤 멤버를 이용할 수 있는가는 상자의 타입이 결정한다
- 멤버가 어떻게 움직이는지는 내용의 타입이 결정한다
취급 변경
- as 키워드를 사용하여 타입 캐스팅을 수행한다
- is 키워드를 사용하여 타입을 검사할 수 있다
다형성
- 같은 부모를 가지는 다른 인스턴스를 동일시하여, 부모 클래스 타입의 에 담을 수 있다
- 마찬가지로, 부모 클래스 타입의 인수나 리턴 값을 이용하여, 다른 클래스를 모아서 처리 가능
- 동일시 취급 해도, 각각의 인스턴스는 각 클래스의 정의를 따르고 다른 동작을 한다.