상속(Inheritance)
- is A 구조
- 일반적인 개념과 구체적인 개념과의 관계
- 상위 클래스 : 일반적인 개념 클래스(ex. 포유류)
- 하위 클래스 : 구체적인 개념 클래스(ex. 사람, 원숭이, 고래...)
- 단순히 코드를 재사용하는 목적으로 사용하지 않음.
- 일반적인 클래스가 있고, 유사한 클래스를 만드는데, 기존의 클래스의 기능을 가져다가 좀 더 확장된 기능을 만들 때 상속을 사용.
- 다중 상속이 불가
- 상위 클래스는 하위 클래스보다 일반적인 개념과 기능을 가짐.
- 하위 클래스는 상위 클래스보다 구체적인 개념과 기능을 가짐.
class Apple extends Fruit
final : (클래스 앞에 붙을 경우) 상속 불가 클래스.
(메소드 앞에 붙을 경우) 오버라이드 할 수 없는 메소드.
클래스에서 상속의 의미
: 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능이 확장되는 클래스를 구현함.
하위 클래스가 생성되는 과정
- 하위 클래스가 생성될 때 상위 클래스가 먼저 생성됨.
- 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨.
하위 클래스의 생성자에서는 무조건 상위 클래스의 생성자가 호출되어야 함.
- 하위클래스에서 상위 클래스의 생성자를 호출하는 코드가 없는 경우,
컴파일러는 상위 클래스 기본 생성자를 호출하기 위한 super()를 추가함.
- super()로 호출되는 생성자는 상위 클래스의 기본 생성자.
- 만약 상위 클래스에 매개변수가 있는 생성자만 존재하는 경우,
하위 클래스는 명시적으로 상위 클래스의 생성자를 호출해야 함.
상위 클래스로의 묵시적 형 변환(업캐스팅)
: 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음.
하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형변환이 가능.
상속관계에서 모든 하위 클래스는 상위클래스로 묵시적 형 변환이 됨. (역은 성립하지 X)
Ex. (class VIPCustomer extends Customer일 때) Customer vc = new VIPCustomer();
protected
외부 클래스에는 private으로, 하위 클래스에는 public의 기능을 구현한 키워드
상위 클래스에 protected로 선언된 변수나 메서드는 다른 외부 클래스에서는 사용할 수 없지만 하위 클래스에서는 사용가능.
접근 제한자(access modifier)의 가시성
외부 클래스 | 하위 클래스 | 동일 패키지 | 내부 클래스 | |
public | O | O | O | O |
protected | X | O | O | O |
선언되지 않음 (default) |
X | X | O | O |
private | X | X | X | O |
구성(Composition)
has A 구조. (A가 핵심적 부분이 아니며, 구현 세부사항에 불과하다.)
- 한 클래스가 다른 클래스를 소유한 고나계
- 코드 재사용의 한 방법
class Fruit {
}
class Apple {
private Fruit fruit = new Fruit();
}
'자바기초' 카테고리의 다른 글
코딩의 기본 (0) | 2020.05.04 |
---|---|
length 와 length() + size() (0) | 2020.05.01 |
내가 사용하는 Eclipse 단축키 (0) | 2020.04.28 |
생성자 (0) | 2020.04.28 |
쿠키, 세션, 캐시 (0) | 2020.04.27 |