[ 상속 관계의 생성자 ]
- 자식 클래스를 생성할 땐 "반드시" 부모 클래스를 "먼저" 생성해야 한다.
- 서브 클래스를 생성할 땐 "반드시" 슈퍼 클래스를 "먼저" 생성해야 한다.
- 서브 클래스의 생성자가 호출될 때는 "반드시" 슈퍼 클래스의 생성자를 "먼저" 호출해야 한다.
- 만약 서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 호출하지 않으면 Java에 의해서 슈퍼 클래스의 "디폴트 생성자"가 호출된다.
- 서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 호출하는 방법은 super()이다.
[ 메인 메소드 ]
public class MainWrapper {
public static void main(String[] args) {
// new Student()를 이용한 Student 객체 생성
Student s1 = new Student();
System.out.println(s1.getName());
System.out.println(s1.getSchool());
// new Student("가산대학교")를 이용한 Student 객체 생성
Student s2 = new Student("가산대학교");
System.out.println(s2.getName());
System.out.println(s2.getSchool());
// new Student("홍길동", "가산대학교")를 이용한 Student 객체 생성
Student s3 = new Student("홍길동", "가산대학교");
System.out.println(s3.getName());
System.out.println(s3.getSchool());
}
}
[ 사람 - 부모 클래스 ]
public class Person {
private String name;
// new Person()에서 호출되는 생성자(constructor)
public Person() {
System.out.println("Person() 호출");
}
// new Person("홍길동")에서 호출되는 생성자(constructor)
public Person(String name) {
this.name = name;
System.out.println("Person(String name) 호출");
}
// Getter & Setter
public String getName() {
return name;
}
public void setName(Stirng name) {
this.name = name;
}
}
[ 학생 - 자식 클래스 ]
public class Student extends Person {
private String school;
// new Student()에서 호출되는 생성자
public Student() {
System.out.println("Student() 호출");
}
// new Student("가산대학교")에서 호출되는 생성자
public Student(String school) {
this.school = school;
System.out.println("Student(String school) 호출");
}
// new Student("홍길동", "가산대학교")에서 호출되는 생성자
public Student(String name, String school) {
// 파라미터 String name을 슈퍼 클래스의 생성자를 호출할 때 전달한다.
super(name); // 인수 name은 String 타입이므로 파라미터가 String인 Person생성자가 호출된다.
this.school = school;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}