package ex_constructor;
public class Ex1 {
public static void main(String[] args) {
/*
* 상속에서의 생성자
* - 생성자는 상속되지 않는다!
* => 생성자의 이름은 자신의 클래스 이름과 동일해야하므로
* 부모의 생성자를 상속받으면 클래스 이름과 다르기 때문!
*
* - 서브클래스의 인스턴스를 생성하기 위해 생성자를 호출하면
* 암묵적으로 슈퍼클래스의 인스턴스가 생성되고
* 슈퍼클래스의 생성자를 호출하여 작업을 수행한 후
* 서브클래스 생성자 내의 코드가 실행됨
*
*/
SpiderMan s = new SpiderMan();
// => SpiderMan() 생성자를 호출했지만, 먼저 슈퍼클래스(Person)의 생성자가 호출되고 나서
// SpiderMan() 생성자가 호출!
}
}
class Person {
// => Person 클래스는 별도의 상속이 표시되지 않았으므로
// 자동으로 Object 클래스를 상속받는다!
String name;
int age;
// 기본 생성자 정의
public Person() {
// Object 클래스의 기본 생성자 Object() 가 자동으로 먼저 호출됨
System.out.println("생성자 Person() 호출됨!");
}
// name, age를 파라미터로 갖는 파라미터 생성자 정의
public Person(String name, int age) {
System.out.println("생성자 Person(String, int) 호출됨!");
this.name = name;
this.age = age;
}
}
// Person 클래스를 상속받는 SpiderMan 클래스 정의
class SpiderMan extends Person {
public SpiderMan() {
// 서브클래스(SpiderMan) 생성자 호출 시 다른 코드를 실행하기 전
// 먼저 슈퍼클래스(Person)의 생성자가 자동으로 호출됨
// => Person() 생성자 호출됨!
System.out.println("생성자 SpiderMan() 호출됨!");
}
}