상속이란?
- 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능이 확장되는 클래스를 구현함
- 상속하는 클래스: 상위 클래스, parent class, base class, super class
상속 받는 클래스: 하위 클래스, child class, derived class, subclass
클래스 상속 문법
class B extends A{
}
- 상위 클래스는 하위 클래스보다 일반적인 의미를 가짐
- 하위 클래스는 상위 클래스보다 구체적인 의미를 가짐
접근 제한자 가시성
외부 클래스 | 하위 클래스 | 동일 패키지 | 내부 클래스 | |
public | O | O | O | O |
protected | X | O | O | O |
선언되지 않음 (default) |
X | X | O | O |
private | X | X | X | O |
수정한 Customer 클래스
- 따라서 Customer 클래스에 선언된 private 변수를 protected로 선언함
public class Main
{
protected int customerID;
protected String customerName;
protected String customerGrade;
int bonusPoint;
double bonusRatio;
}
상속에서 클래스 생성 과정
- 하위 클래스가 생성 될떄 상위클래스가 먼저 생성됨
- 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨
- 하위 클래스의 생성자에서는 무조건 상위클래스의 생성자가 호출되어야 함
- 아무것도 없는 경우 컴파일러는 상위 클래스의 기본 생성자가 호출하기 위한 super()를 코드에 넣어 줌
- super() 호출되는 생성자는 상위 클래스의 기본 생성자임
- 만약 상위 클래스의 기본 생성자가 없는 경우 ( 매개변수가 있는 생성자만 존재하는 경우) 하위 글래스는 명시적으로 상위 클래스를 호출해야 함
상속에서의 메모리 상태
- 상위 클래스의 인스턴스가 먼저 생성이 되고, 하위 클래스의 인스턴스가 생성됨
- 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨
super 예약어
- this가 자기 자신의 인스턴스의 주소를 가지는 것처럼
- super는 하위 클래스가 상위 클래스에 대한 주소를 가지게 됨
- 하위 클래스가 상위 클래스에 접근할 때 사용할 수 있음
상위 클래스로의 묵시적 형 변환(업캐스팅)
- 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음
- 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형변환이 가능함
Custimer VC = new VIPCustomer();
선언된 클래스형(상위 클래스형) 생성된 인스턴스의 클래스형 (하위 클래스형)
- VIPCustomer() 생성자의 호출로 인스턴스는 모두 생성되지만 타입이 customer 이므로 접근 할 수 있는 변수나 메서드는 Customer의 변수와 메서드임
매서즈 오버라이딩(overriding)
- 상위 클래스에 정의된 메서드 중 하위 클래스와 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의 함
// VIPCustomer 클래스의 calcPrice() 매서드 재정의
public int calcPrice(int price){
bonusPoint += price * bonusRatio;
return price - (int)(price * saleRatio);
}
// 보너스 포인트 적립하고 할인률을 적용한 가격을 반환
'자바' 카테고리의 다른 글
[JAVA] 출력 형식 (0) | 2022.11.26 |
---|---|
[JAVA] 백준 기초공부 3 (0) | 2022.11.26 |
[JAVA] ArrayList 클래스 (0) | 2022.11.26 |
[JAVA] 다차열 배열 (0) | 2022.11.26 |
[JAVA] 객체 배열 만들기 (0) | 2022.11.26 |