0926 JAVA - 상속 - 생성자
상속에서의 생성자
- 생성자 : 클래스명과 이름이 같고 리턴타입이 없는 메서드의 일종
- 생성자는 상속되지 않음
=> 상속받을 경우 자신의 클래스 이름과 생성자 이름이 다르기 때문에
생성자 정의 규칙을 위반하게 됨
- 상속 관계 에서 인스턴스를 생성 할 때
서브클래스의 인스턴스가 생성되기 전 슈퍼클래스의 인스턴스를 먼저 생성 한 후
서브 클래스의 인스턴스를 생성함
- 서브클래스의 생성자가 호출되면 가장 먼저
슈퍼클래스의 생성자를 호출하여 슈퍼클래스의 인스턴스를 생성하고
그 후에 서브클래스의 인스턴스가 생성되어 생성자 코드가 실행됨
class Employee4 {
String name;
int salary;
public Employee4() { // alt shift s + o 체크 다 풀고 만듬 => 기본 생성자
super();
}
}
super()
[ Manager4 인스턴스를 생성하는 과정 ]
=> 서브클래스의 인스턴스를 생성하는 과정에서
서브클래스 생성자에서 인스턴스 생성 전 슈퍼클래스의 생성자 호출
즉, 슈퍼클래스의 인스턴스가 먼저 생성 된 후 서브클래스의 인스턴스가 생성됨
1) new Manager4() 코드에 의해 Manager4() 생성자로 이동
2) Manager4() 생성자에서 슈퍼클래스 Employee의 생성자 Employee() 호출
=> super();
3) Employee4() 생성자에서 슈퍼클래스 Object 의 생성자 Object() 호출
=> super();
4) Object 인스턴스가 생성되고, Object() 생성자 내의 코드가 실행됨
5) Employee 인스턴스가 생성되고, Employee() 생성자 내의 코드 실행됨
6) Manager4 인스턴스가 생성되고, Manager4() 생성자 내의 코드 실행됨
Manager4 m = new Manager4();
//기본생성자
class Employee4 {
String name;
int salary;
//이름, 연봉을 전달받아 초기화하는 파라미터 생성자 정의
//(2)
public Employee4() { //체크 다 풀고 만듬 => 기본 생성자
super(); // Object 클래스를 뜻함.
System.out.println("Employee4() 생성자 호출됨");
}
}
//Employee4 클래스를 상속받는 서브클래스 Manager4 정의
//(3)
class Manager4 extends Employee4{
String depart;
public Manager4() {
//(1)
super();
// = Employee(){} 기본 생성자를 호출
//서브클래스의 생성자를 호출하게 되면
//내부적으로 가장 먼저 슈퍼클래스의 기본생성자를 자동으로 호출하게 됨
// => 슈퍼클래스 생성자의 작업이 종료된 후 서브클래스 생성자의 작업 수행
System.out.println("Manager4() 생성자 호출 됨!");
}
public Manager4(String name, int salary, String depart) {
super(); //employee4() 기본 생성자를 호출
this.name = name;
this.salary = salary;
this.depart = depart;
}
}