JAVA
상속을 활용한 멤버십 클래스 구현하기
본투비곰손
2022. 7. 22. 23:12
728x90
고객의 속성 : 고객아이디 ,고객이름, 고객 등급 , 보너스 포인트 적립비율
일반고객의 경우 물품구매시 1%의 보너스 포인트 적립
상위 클래스에서 private로 작성된 멤버 변수는 하위클래스에 서 접근 할 수 없다.
접근 제한 (캡슐화)하기위해 상속에서는 private 대신 protected를 사용한다.
package ch02;
public class Customer {
protected int customerID;
protected String customerName;
protected String customerGrade;
int bonusPoint;
double bonusRatio; // 먼저 일반고객의 변수 선언
public Customer() {
customerGrade ="SILVER";
bonusRatio = 0.01; // Customer 생성
}
public int calcPrice(int price) {
bonusPoint += price *bonusRatio;
return price; // 할인 계산 식을 만들어 준다
}
public int getCustomerID() { // 캡슐화된 값를 가져다 값을 반환하는 getter
return customerID;
}
public void setCustomerID(int customerID) { // 캡슐화된 값을 설정하는 setter
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 + "님의 등급은" +customerGrade + "이며,보너스 포인트는 " + bonusPoint +"입니다.";
}
}
VIP고객 역시 공통된 변수를 포함하고 있기 때문에 상속 받을 수 있다.
VIP고객은 추가로 담당직원과 가격 할인이 추가되는 하위 클래스 이다.
package ch02;
public class VIPCustomer extends Customer { // extends를 사용하여 Customer을 상속 받았다.
double salesRatio; //추가적인 변수 선언
private agentID;
public VIPCustomer() { //생성자 생성
customerGrade ="VIP";
salesRatio = 0.1;
bonusRatio = 0.05;
}
public String getAgentID() { // 접근 제한인 private 인 값이기때문에 getter와 setter을 작성한다.
return agentID;
}
public void setAgentID(String agentID) {
this.agentID = agentID;
}
}
Customer 클래스에 추가해서 구현 할 수 있지만 세부 사항이 달라질 경우 일일이 생성을 해야하는 번거로움과 코드가
지저분해 지는 상황이 발생된다.
package ch02;
public class CustomerTest {
public static void main(String[] args) {
Customer customerLee = new Customer();
customerLee.setCustomerName("이순신");
customerLee.setCustomerID(10010);
customerLee.bonusPoint = 1000;
System.out.println(customerLee.showCustomerInfo());
VIPCustomer customerKim = new VIPCustomer();
customerKim.setCustomerName("김유신");
customerKim.setCustomerID(10020);
customerKim.bonusPoint = 10000;
System.out.println(customerKim.showCustomerInfo()); //Customer 매서드지만 상속 받았기때문에 사용이 가능
}
}
728x90