03. 상속에서 클래스 생성 과정과 형변환

0

Java 공부

목록 보기
3/18
post-thumbnail
post-custom-banner

하위 클래스가 생성 되는 과정

  • 하위 클래스를 생성하면 상위 클래스가 먼저 생성됨
  • new VIPCustomer()를 호출하면 Customer()가 먼저 호출 됨
  • 클래스가 상속 받은 경우 하위 클래스의 생성자에서는 반드시 상위 클래스의 생성자를 호출 함
	public Customer() {
		customerGrade = "SILVER";
		bonusRatio = 0.01;

		System.out.println("Customer() clall"); // 호출되는지 확인.
	}
	public VIPCustomer() { // super 사용법 1
		super(0, "no-name");
		salesRatio = 0.1;
		bonusRatio = 0.05;
		customerGrade = "VIP";
		
		System.out.println("VIPCustomer() clall");// 호출되는지 확인.
	}
public class CustomerTest {

	public static void main(String[] args) {

		VIPCustomer customerKim = new VIPCustomer();
		customerKim.setCustomerName("김유신");
		customerKim.setCustomerID(10002);
		customerKim.bonusPoint = 10000;
		System.out.println(customerKim.showCustomerInfo());
	}
}

Customer() clall
VIPCustomer() clall
김유신님의 등급은 VIP이며, 보너스 포인트는10000입니다.

VIPCustomer 김유신만 호출 하였지만,
Customer() clall 이 먼저 불러지고 VIPCustomer() clall 이 불러진다.


super 키워드

  • 하위 클래스에서 가지는 상위 클래스에 대한 참조 값
  • super()는 상위 클래스의 기본 생성자를 호출 함
  • super는 생성된 상위 클래스 인스턴스의 참조 값을 가지므로 super를 이용하여 상위 클래스의 메서드나 멤버 변수에 접근할 수 있음
  • 상위 클래스의 기본 생성자가 없는 경우 ( 다른 생성자가 있는 경우 ) 하위 클래스에서는 생성자에서는 super를 이용하여
    명시적으로 상위 클래스의 생성자를 호출 함
// 디폴트 생성자 없애고 매개 변수가 있는 생성자 추가
public Customer(int customerID, String customerName) {
		this.customerID = customerID;
		this.customerName = customerName;
		customerGrade = "SILVER";
		bonusRatio = 0.01;
		System.out.println("Customer(int, String) 생성자 호출");
}
// super를 이용하여 상위 클래스의 생성자 명시적으로 호출
public VIPCustomer(int customerID, String customerName) {
		super(customerID, customerName);
		customerGrade = "VIP";
		bonusRatio = 0.05;
		salesRatio = 0.1;
		System.out.println("VIPCustomer(int, String) 생성자 호출");
}
public class CustomerTest {
	public static void main(String[] args) {
		Customer customerLee = new Customer(10010, "이순신");
		customerLee.bonusPoint = 1000;
		System.out.println(customerLee.showCustomerInfo());
		VIPCustomer customerKim = new VIPCustomer(10020, "김유신");
		customerKim.bonusPoint = 10000;
		System.out.println(customerKim.showCustomerInfo());
	}
}

호출 순서

Customer(int, String) clall
이순신님의 등급은 SILVER이며, 보너스 포인트는1000입니다.
Customer(int, String) clall
VIPCustomer(int, String) clall
김유신님의 등급은 VIP이며, 보너스 포인트는10000입니다.

post-custom-banner

0개의 댓글