- 부모의 기본 생성자만 상속할 때: 자식 안에서 super()안써도 부모 생성자 저절로 호출 + 자식 생성자 호출.
- 부모에서 변수 생성자 상속할 때: 자식 안에서 super(변수) 쓰면 부모 변수 생성자 호출 + 자식 변수 생성자 호출.
- 자식 안에서 super(변수) 안쓰면 부모 기본 생성자 저절로 호출 + 자식 생성자 호출.
객체가 생성될 때 반드시 생성자를 실행하고 생성됌.
자식 객체가 생성될 때 부모 생성자를 실행 -> 자식 생성자를 실행.
내가 태어나기 위해서는 반드시 부모가 먼저 태어나야함.
메모리에 car객체가 올라가고 truck객체가 올라감.
public class Car {
//생성자는 리턴 없음. (메소드는 있음)
public Car() {
System.out.println("Car의 기본 생성자"); //[A]
}
public Car(String name) {
System.out.println("Car의 name 생성자"); //[B]
}
public void drive() {
System.out.println("1. let's drive a car");
}
}
public class Truck extends Car {
public Truck() {
super(); //안써도 됌. 컴파일러는 자동으로 super();를 호출해서 부모의 기본 생성자를 호출했음.[A]
// super(name); //그렇다면 왜 굳이 super()쓰나? [B]
// 만약 부모가 기본 생성자 super() 없고 변수 쓰는 생성자만 있을 때에는 super(변수)해줘야 함.
System.out.println("Truck의 기본 생성자 ");
}
}
public class TruckRunner {
public static void main(String[] args) {
Truck truck = new Truck();
truck.drive();
/*
- truck이 인스턴스화 될 때 (메모리에 올라갈 때) 부모인 car 객체도 메모리에 올라감.
- 부모가 먼저 생성됌 => 그래야 자식도 생성됌.
- 생성자가 하는 일: 객체를 초기화하는 일
- 생성자가 호출됄 때 자동으로 부모의 생성자도 호출돼면서 부모객체를 초기화함.
- super는 부모 객체를 나타내는 키워드.
- super() 라고하면 부모 생성자가 호출됌.
*/
// Car car = new Car();
}
}