생성자
class Customer{
public Customer(){
System.out.println("고객 호출");
}
}
class VipCustomer extends Customer{
public VipCustomer(){
// super(); 자동생성
System.out.println("VIP고객 호출");
}
}
public class Test {
public static void main(String args[]) {
VipCustomer vipCustomer = new VipCustomer();
}
}
출력결과:
고객 호출
VIP고객 호출
- Customer는 생성하지 않고 Customer의 하위 클래스인 VipCustomer의 인스턴스만 생성했지만, Pre-compile 단계에서 알아서 super()를 생성해준다.
- super는 this와 같은 맥락으로, 상위클래스의 메모리 위치, 즉 참조값을 가지고 있다.
- 하위 클래스가 호출되기 전, 상위 클래스가 먼저 호출된다.
class Customer{
public Customer(String name){
System.out.println( name + "고객 호출");
}
}
class VipCustomer extends Customer{ -----------> ERROR !
public VipCustomer(){
System.out.println("VIP고객 호출");
}
}
- 다음과 같은 경우 오류가 뜨는데, 이는 Customer에서 생성자를 매개변수를 받는 타입으로 만들었으므로 VipCustomer에도 이를 명시해주어야 컴파일러가 해석할 수 있다.
class Customer{
public Customer(String name){
System.out.println( name + "고객 호출");
}
}
class VipCustomer extends Customer{
public VipCustomer(){
super("hi");
System.out.println("VIP고객 호출");
}
}
- 다음과 같이 상위클래스의 생성자를 명시해주면 오류가 해결된다.
( 상위 클래스에 매개 변수만 있는 생성자가 있을 경우, 하위 클래스의 생성자에 명시를 해주어야 한다. )
'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글
추상클래스 & 템플릿 메서드 (0) | 2020.03.30 |
---|---|
DownCasting & instance of (0) | 2020.03.29 |
다형성 , 상속, 가상함수 , 동적바인딩 (0) | 2020.03.28 |
ArrayList 기초 (0) | 2020.03.28 |
배열 ( Array ) (0) | 2020.03.27 |
댓글