상속을 받은 하위클래스는 상위클래스의 변수와 메서드를 사용할 수 있는데,
변수를 사용할 수 있다는 것은 그 변수를 저장하고 있는 메모리가 존재한다는 뜻이다.
public class Customer {
...
public Customer() {
...
System.out.println("Customer() 생성자 호출");
}
...
}
public class VIPCustomer extends Customer {
...
public VIPCustomer() {
...
System.out.println("VIPCustomer() 생성자 호출");
}
...
}
public class CustomerTest {
public static void main(String[ ] args) {
VIPCustomer a = new VIPCustomer(); // 하위클래스 생성
...
}
}
CustomerTest 클래스를 실행시키면,
Customer() 생성자 호출
VIPCustomer() 생성자 호출
이 출력된다.
정리하자면 상위클래스를 상속받은 하위클래스가 생성될 때에는 반드시 상위 클래스의 생성자가 먼저 호출된다.
그리고 상위클래스 생성자가 호출될 때 상위클래스의 멤버변수가 메모리에 생성되는 것이다.
이렇게 하위클래스 생성자만 호출했는데 상위클래스 생성자가 호출되는 이유는 하위클래스 생성자에서 super()를 자동으로 호출하기 때문이다.
super 예약어는 하위클래스에서 상위클래스로 접근할 때 사용한다.
하위클래스는 상위클래스의 주소(참조값)을 알고 있고, 이 참조값을 가지고 있는 예약어가 super이다.
public class Customer {
...
public Customer(int customerID, String customerName) {
...
}
// 디폴트 생성자 없음.
}
public class VIPCustomer extends Customer {
...
public VIPCustomer(int customerID, String customerName, int agentID) {
super(customerID, customerName); // 상위 클래스 생성자 호출
...
}
...
}
상위클래스에 디폴트 생성자가 있다면 하위클래스의 생성자를 호출할 때 컴파일러가 super()를 자동으로 호출하지만,
위 예시처럼 상위클래스(Customer)에 디폴트 생성자가 없다면
하위클래스 생성자에 super()에 매개변수를 추가하여, 매개변수가 있는 상위클래스의 생성자를 직접 호출해야한다.
'자바 기초' 카테고리의 다른 글
자바 다형성 -Do it! 자바프로그래밍기초 (0) | 2022.07.22 |
---|---|
자바 메서드 오버라이딩, 클래스 형 변환 - Do it ! 자바프로그래밍기초 (0) | 2022.07.21 |
자바 상속 - Do it! 자바프로그래밍 기초 (0) | 2022.07.20 |
자바 ArrayList - Do it! 자바프로그래밍기초 (0) | 2022.07.20 |
자바 다차원배열 - Do it! 자바프로그래밍기초 (0) | 2022.07.20 |