- 객체 상속 시, 인스턴스는 어떤 순서로 생성될까?
객체를 상속하고 있을 경우, 인스턴스의 생성 순서는 어떻게 될까?
아래와 같이 Student 객체는 Person 객체를 상속하고 있다고 가정해보자.
public class Person {
// 내용 생략
}
public class Student extends Person {
// 내용 생략
}
여기서 Student 인스턴스를 생성할 경우, 아래와 같은 구조가 된다. (모든 객체는 Object 객체를 상속하고 있다.)
객체는 본인보다 상속 받은 상위 클래스를 먼저 인스턴스화 한 뒤, 마지막에 본인의 인스턴스를 생성한다.
상위 클래스의 생성자를 super()로 호출하며, 코드로 보면 아래와 같다.
public class Person {
public Person() {
super(); // Object에 대한 생성자. 생략 가능
}
}
public class Student extends Person {
public Student() {
super(); // Person에 대한 생성자. 생략 가능
}
}
super()에는 한 가지 특징이 있는데, 생성자의 가장 첫 번째 줄에 나와야 한다.
public class Person extends Object {
private String name;
public Person(String name) {
// this.name = name; // 에러 발생
super();
this.name = name; // super()는 항상 생성자 첫 줄에 나와야 한다.
}
}
super()를 사용할 때, super에 인수를 직접적으로 넣기 보다는 this를 활용하여 만드는 게 좋다.
아래의 코드를 보면 더 쉽게 이해가 될 것이다. (틀린 방법은 아니지만, 더 좋은 방법이라 생각한다.)
public class Student extends Person {
public Student(String name) {
super(name);
}
public Student() {
// super( “Student” );
this("Student"); // Student 생성자를 호출
}
}
- 연습문제