728x90
반응형
이번 포스팅은 상속에서 클래스 생성과 형 변환에 대해 다뤄보겠습니다.
하위 클래스가 생성되는 과정
상속받은 상위 클래스의 변수를 자기 것처럼 사용할 수 있습니다.
변수를 사용할 수 있다는 것은 그 변수를 저장하고 있는 메모리가 존재하고 있다는 것 입니다.
Customer 클래스에서 생성자 호출 출력문을 추가하겠습니다.
package inheritance;
public class Customer {
// 멤버 변수
protected int customerID; // 고객 아이디
protected String customerName; // 고객 이름
protected String customerGrade; // 고객 등급
int bonusPoint; // 보너스 포인트
double bonusRatio; // 적립 비율
// 디폴트 생성자
public Customer() {
customerGrade = "SILVER"; // 기본 등급
bonusRatio = 0.01; // 보너스 포인트 기본 적립 비율
System.out.println("Customer() 생성자 호출");
}
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) {
bonusPoint += price * bonusRatio; // 보너스 포인트 계산
return price;
}
// 고객 정보를 반환하는 메서드
public String showCustomerInfo() {
return customerName + " 님의 등급은 " + customerGrade + "이며, 보너스 포인트는 " + bonusPoint + "입니다.";
}
}
VIPCustomer 클래스에서 생성자 호출 출력문을 추가하겠습니다.
package inheritance;
public class VIPCustomer extends Customer {
private int agentID;
double saleRatio;
public VIPCustomer() {
customerGrade = "VIP";
bonusRatio = 0.05;
saleRatio = 0.1;
System.out.println("VIPCustomer() 생성자 호출");
}
public int getAgentID() {
return agentID;
}
}
이어서 테스트 해보겠습니다.
package inheritance;
public class CustomerTest2 {
public static void main(String[] args) {
VIPCustomer customerKim = new VIPCustomer();
customerKim.setCustomerID(10020);
customerKim.setCustomerName("김유신");
customerKim.bonusPoint = 10000;
System.out.println(customerKim.showCustomerInfo());
}
}
상위 클래스의 Customer() 생성자가 먼저 호출되고 그 다음에 VIPCustomer()가 호출되는 것을 볼 수 있습니다.
상위 클래스를 하위 클래스가 생성될 때는 반드시 상위 클래스의 생성자가 먼저 호출됩니다.
상위 클래스 생성자가 호출될 때 상위 클래스의 멤버 변수가 메모리에 생성되는 것 입니다.
위처럼 상위 클래스의 변수가 메모리에 먼저 생성되기 때문에 하위 클래스에서도 이 값들을 모두 사용할 수 있습니다.
728x90
반응형
'자바 > 개념' 카테고리의 다른 글
[java] 묵시적 형 변환 (0) | 2021.01.27 |
---|---|
[java] 상속 super (0) | 2021.01.27 |
[java] 상속 (1) | 2021.01.27 |
[java] 싱글톤 패턴 응용 (0) | 2021.01.26 |
[java] 싱글톤 패턴 (0) | 2021.01.26 |
댓글