상속(Inheritance)
- 상속 [Is a realationship : inheritance]
: 단순히 이미 있는 클래스를 가져다 쓰는것이 아님.
: 보편적인 클래스가 정의되어 있고 그 기능을 그대로 가져다 쓰면서 좀 더
구체적인 클래스(add-on)메서드를 사용하는 것.(is-a 관계)
* Java는 Single Inheritance만 가능함. 하나의 클래스에서만 상속 가능.
: 상위클래스의 인스턴스가 먼저 생성이 되고, 하위 클래스의 인스턴스가 생성됨.
: 반드시 상위클래스의 생성자를 먼저 호출해야함. super()
로 디폴트 생성자 호출
<상위클래스의 디폴트 생성자가 없는경우>
- 단순히 코드를 재사용하는 목적으로 사용하는 것이 아니라 오버라이딩을 통해 새로운 메서드를 만들어 재사용 하는것!
- Has-a 관계(Composition)의 경우는 한 클래스가 다른 클래스를 소유한 관계
→ 단순히 사용만 할 때.
extends
키워드를 통해 사용
A Class : 부모클래스, 슈퍼클래스, 상위클래스
B Class : 자식클래스, 드라이븐클래스, 하위클래스
-
접근제어자 구분
-
public : 다른 패키지에서도 쓸 수 있음.
-
private : 같은 클래스 안에서만 사용 가능
-
default : 같은 패키지 안에서만 사용 가능
-
protected : 다른 클래스에 대해서는 private
하지만 상속받는 자식 클래스에 대해 public
함
"가시성, 접근성 순서"
(좁음) private ▶ (default) ▶ protected ▶ public (넓음)
상속의 Upcasting
- UpCasting : 상위 클래스 변수로 묵시적 형변환.
- A class(부모) B class(자식)을 예시로
A instance = new B();
위의 코드는 B class만 갖고 있는 인스턴스 변수, 메서드는 호출 불가능함.
상속의 Downcasting