[이것이자바다]7. 상속
부모 생성자 호출
자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다.
- 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.(super())
메소드 오버라이딩(@Override)
- 부모의 메소드와 동일한 시그니처
- 접근 제한을 더 강하게 할 수 없다.
- 새로운 Exception throws 불가
super: 부모 객체를 참조하는 키워드
- super.부모메소드();
final 클래스, 메소드
- 클래스의 경우 상속할 수 없는 클래스가 된다.(ex. String 클래스)
- 메소드의 경우 오버라이딩할 수 없다.
타입 변환과 다형성
- 다형성: 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질
> 부모 클래스로 타입 변환을 허용. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다.
- 자동타입변환(Promotion)
> 부모클래스 변수 = 자식클래스타입;
- 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다. 그러나 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스의 메소드가 대신 호출된다.
- 강제타입변환(Casting)
> 자식클래스 변수 = (자식클래스) 부모클래스타입;
> 모든 부모 타입을 자식 클래스 타입으로 강제 변환할 있는 것이 아니고, 자식 타입이 부모 타입으로 자동 변환한 후, 다시 자식 타입으로 변환할 때만 강제 타입 변환을 사용할 수 있다.
> 자식 타입에 선언된 필드와 메소드를 사용해야되는 경우 Casting을 한다.
- 객체타입확인(instanceof): 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인하는 연산자
> parent instanceof Child
추상 클래스(abstract class)
- 실체 클래스의 공통되는 필드와 메소드를 추출해서 만드는 클래스로 객체를 직접 생성해서 사용할 수 없다.
- 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언할 수 있다.
- new 연선자로 직접 생성자 호출은 할 수 없지만 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.
추상 메소드와 오버라이딩
- 추상 메소드는 추상 클래스에서만 선언할 수 있다. 메소드의 선언부만 있고 실행 내용인 중괄호 {}가 없는 메소드
- 하위 클래스가 반드시 실행 내용을 채우도록 해야하는 경우 추상 메소드를 선언한다.