다형성
- 다형적 참조의 핵심은 부모는 자식을 품을 수 있다는 것이다.
- 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있다.
- 다형적 참조시 오버라이딩 된 메서드가 항상 우선권을 가진다.
업캐스팅
- 자식 클래스 타입에서 부모 클래스 타입으로 형 변환
- 자식 인스턴스를 생성하면 부모도 같이 생성되기 때문에 업캐스팅시 문제가 발생하지 않는다.
- 그래서 업캐스팅 사용시 생략이 가능하다.
다운캐스팅
- 부모 클래스에서 자식 클래스 타입으로 형 변환
- 부모 인스턴스를 생성시 하위 자식은 생성되지 않기때문에 문제가 발생한다.
- 다운캐스팅 사용시 생략할 수 없다.
Child child = new Child();
// 업캐스팅
Parent parent = (Parents) child;
Parent parent = child; // 업캐스팅시 () 생략 권장
// 다운캐스팅
Child child1 = (Child) parent;
추상 클래스
- 추상 클래스를 선언할때 abstract 키워드를 붙여주면 된다.
- 추상 클래스는 직접 인스턴스 생성을 못한다.
ex) AbstractA abstract = new AbstractA() -> 불가능
- 추상 클래스는 일반 클래스와 동일하게 생성자, 인스턴스 멤버변수, 메서드 선언이 가능하다.
추상 메서드
- 추상메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다.
- 추상 메서드는 상속 받은 자식 클래스에서 반드시 오버라이딩 해서 사용해야 한다.
추상클래스는 인스턴스 생성을 못하는 이유
- 동작이 정의되어 있지 않은 추상 메서드를 포함하고 있기 때문에
- 추상클래스를 상속받아 자식 클래스들이 각자의 방식으로 구현하는게 목적이기 때문에