Customer)과 이보다 충성도가 높은 우수고객(VIPCustomer)에 따른 서비스를 제공하고자 한다.
- 고객의 속성 : 고객 아이디, 고객 이름, 고객 등급, 보너스 포인트, 보너스 포인트 적립비율
- 일반 고객의 경우 물품 구매시
1%의 보너스 포인트 적립
package ch01; public class Customer { private int customerID; private String customerName; private String customerGrade; int bonusPoint; double bonusRatio; public Customer() { customerGrade = "SILVER"; bonusRatio = 0.01; } public int calcPrice(int price) { bonusPoint += price * bonusRatio; // 보너스 포인트 적립 return bounusPoint; } public String showCustomerInfo() { return customerName + "님의 등급은 " + customerGrade + "이며, 보너스 포인트는" + bonusPoint + "입니다"; } }
- 매출에 더 많은 기여를 하는 단골 고객
- 제품을 살때
10%를 할인 해준다.- 보너스 포인트는 제품 가격의
5%를 적립 해준다.- 담당 전문 상담원이 배정된다.
Customer클래스에 추가해서 구현하는 것은 좋지 않다.VIPCustomer클래스를 따로 구현한다.- 이미
Customer에 구현된 내용이 중복되므로Customer를 확장하여 구현한다.(상속)
package ch02; public class VIPCustomer extends Customer { double salesRatio; private String agentID; public VIPCustomer() { bounusRatio = 0.05; salesRatio = 0.1; customerGrade = "VIP"; } public String getAgent() { return agentID; } public String salesPrice(int price) { salesPrice += price * salesRatio; return customerName + "님이 구매한 상품 가격:" + price + " 할인 가격:" + salesPrice + " 총 상품 구매 가격:" + (price - salesPrice) + "입니다."; } }

private 멤버 변수는 하위 클래스에서 접근 할 수 없다.protected 접근 제어자를 사용Customer.java
package ch02; public class Customer { // protected 접근 제어자는 하위 클래스에서는 접근 가능하지만 외부 클래스에서는 접근 불가 protected int customerID; protected String customerName; protected String customerGrade; int bounusPoint; double bounusRatio; public Customer() { customerGrade ="SILVER"; bounusRatio = 0.01; } 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 int calcPrice(int price) { bounusPoint += price * bounusRatio; // 보너스 포인트 적립 return bounusPoint; } public String showCustomerInfo() { return customerName + "님의 등급은 " + customerGrade + "이며, 보너스 포인트는 " + bounusPoint + "입니다."; } }
package ch02; public class CustomerTest { public static void main(String[] args) { Customer customerLee = new Customer(); customerLee.setCustomerName("이순신"); customerLee.setCustomerID(10010); customerLee.bounusPoint = 1000; System.out.println(customerLee.showCustomerInfo()); VIPCustomer customerKim = new VIPCustomer(); // VIPCustomer 클래스가 Customer 클래스를 상속 받기 때문에 Customer 메서드 사용 가능 customerKim.setCustomerName("김유신"); customerKim.setCustomerID(10020); customerKim.bounusPoint = 10000; System.out.println(customerKim.showCustomerInfo()); System.out.println(customerKim.salesPrice(1000)); } }출력 결과