다형성(Polymorphism) : 하나의 이름의 클래스나 메소드가 "여러 가지 형태의 동작을 하는 능력"
클래스의 다형성
: 한 타입의 참조변수로 여러타입의 객체를 참조 가능,
조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조 가능한 것
메소드의 다형성 : 메소드 오버로딩, 메소드 오버라이딩
* 다형성의 유용성 : 다형성에 의해서, 자식타입 객체가 부모타입으로 자동 형변환 가능!
부모 타입만으로도 상속된 모든 자손 타이블을 담을 수 있다.
* instanceof 연산자 : 객체 타입을 확인하는 연산자, true, false를 리턴한다.
ex) 객체 + instanceof + 클래스
* 다형성의 어려움 OOP03 참고 (타입 및 인스턴스, casting 관련)
* 클래스의 구조 : 멤버 변수 (+ 생성자) + 메소드 → 데이터 타입
추상 클래스(abstract class)
: 추상 메소드를 가지고 있는 클래스, 클래스를 선언할 때 abstract 키워드를 반드시 써 줘야 한다.
* 추상 클래스는 인스턴스를 생성할 수 없다. (new 불가능)
추상 메소드(abstract method)
: 원형(prototype)만 선언되 있고, 메소드 본체가 정의되지 않은 메소드, 메소드 본체가 없기 때문에 {} 부분이 없다.
메소드 원형 끝에 ; 으로 끝낸다. 메소드 이름 앞에 반드시 abstract 키워드를 써 줘야 한다.
* 추상 클래스 사용 목적
: 추상 클래스를 상속 받는 자식 클래스에 반드시 구현해야 할 메소드가 있을 경우,
그 메소드를 추상메소드로 만들어서 반드시 override하도록 하는데 목적이 있다.
* 추상 클래스, 메소드 관련 OOP04 참고