본문 바로가기
자바/개념

[java] 상속에서 클래스 생성

by drCode 2021. 1. 27.
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

댓글