1. 상속 (Inheritance)
새로운 클래스를 정의할 때 이미 구현된 클래스의 멤버 변수 또는 메서드를 그대로 물려받아 더 구체적인 기능을 가진 클래스를 구현하는 기법
2. 상속 관계
3. 상속 문법
class B extends A{
...
...
}
1. 상위 클래스
public class Customer {
protected int customerID; # 상속 받은 하위 클래스에서 접근 가능하도록
protected String customerName; # protected 지정
protected String customerGrade;
int bonusPoint;
double bonusRatio;
public Customer() {
customerGrade = "SILVER";
bonusRatio = 0.01;
}
public int calcPrice(int price) {
bonusPoint += price * bonusRatio;
return price;
}
public String showCustomerInfo() {
return customerName + "님의 등급은 " + customerGrade +
"이며, 보너스 포인트는" + bonusPoint + "입니다";
}
... getter / setter
}
2. 하위 클래스
public class VIPCustomer extends Customer{
private int agentID;
double salesRatio;
public VIPCustomer() {
customerGrade = "VIP";
bonusRatio = 0.05;
salesRatio = 0.1;
}
public int getAgentID() {
return agentID;
}
}
3. 하위 클래스 생성 과정(원리)
① new VIPCustomer() 호출
② public VIPCustomer() 생성자 수행
③ super() 호출
④ public Customer() 수행 -> Customer 객체 생성
⑤ 다시 public VIPCustomer() 생성자로 돌아옴 -> VIPCustomer 객체 생성
4. super 키워드
하위 클래스에서 가지는 상위 클래스에 대한 참조 값
5. 상속의 메모리 구조
1. 형변환 (업캐스팅)
Customer vc = new VIPCustomer();
2. 형변환 후 접근 가능 범위
3. 형변환 (다운캐스팅)
if (vc instanceof VIPCustomer) {
VIPCustomer vc = (VIPCustomer)vc;
}