클래스 상속
상속하는 클래스 : 상위 클래스, parent class, base class, super class
상속받는 클래스 : 하위 클래스, child class, derived class, subclass
회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반고객(Customer)과
이보다 충성도가 높은 우수고객(VIPCustomer)에 따른 서비스를 제공하고자 함
물품을 구매 할때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름
여러 멤버십에 대한 각각 다양한 서비스를 제공할 수 있음
멤버십에 대한 구현을 클래스 상속을 활용하여 구현해보기
package ch03;
public class Customer {
protected int customerID;
protected String customerName;
//상속받는 class가 사용할 수 있도록 접근 제어자를 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 int getCustomerID() {
return customerID;
}
public void setCustomerID(int customerID) {
this.customerID = customerID;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerGrade() {
return customerGrade;
}
public void setCustomerGrade(String customerGrade) {
this.customerGrade = customerGrade;
}
public String showCustomerInfo(){
return customerName+"'s grade is "+customerGrade +
" and, bonusPoint is "+bonusPoint;
}
}
package ch03;
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;
}
}
VIPCustomer클래스에서 Customer클래스를 상속받아 멤버변수를 사용하는데 그 멤버변수들은 메모리에 잡혀있어야 사용할 수 있다. 그러나 VIPCustomer 인스턴스만 생성하여도 부모클래스의 멤버변수들을 사용할 수 있는데 그 이유는 무엇일까? 다음 내용에서 알아보자
public VIPCustomer(){
super(); //없어도 default로 생성됨, 실제로 직접쓰는경우는 별로 없음
customerGrade = "VIP";
bonusRatio = 0.05;
salesRatio = 0.1;
}
그러나 부모클래스가 생성자를 따로 만들어주었을 때는 자식 클래스의 생성자에서 super()가 default로 작동될 수 없기 때문에 explicit 하게 super(-,-)를 명시해주어야 한다.
public VIPCustomer(int customerID, String customerName){
super(customerID, customerName);
customerGrade = "VIP";
bonusRatio = 0.05;
salesRatio = 0.1;
System.out.println("VIPCustomer(int, String) call");
}
Customer vc = new VIPCustomer();
VIPCustomer vCustomer = new VIPCustomer();
addCustomer(vCustomer);
int addCustomer(Customer customer){
}