메서드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메서드를 생성자(Constructor)라고 한다
생성자는 객체가 생성될 때 호출된다. 즉, 생성자는 new 키워드가 사용될 때 호출된다.
생성자 연쇄호출이란,
ex)
//code.oa.gg/java8/936
// 문제 : 아래가 실행되도록 해주세요.
class Main {
public static void main(String[] args) {
System.out.println("== 사람객체 생성시작 ==");
new 사람();
System.out.println("== 사람객체 생성끝 ==");
System.out.println("== 청둥오리객체 생성시작 ==");
new 청둥오리();
System.out.println("== 청둥오리객체 생성끝 ==");
/* 출력
== 청둥오리객체 생성시작 ==
생물이 생성되었습니다.
동물이 생성되었습니다.
오리가 생성되었습니다.
청둥오리 생성되었습니다.
== 청둥오리객체 생성끝 ==
*/
}
}
class 생물 {
생물() {
// 이 함수는 부모 클래스 생성자를 자동으로 호출합니다.
System.out.println("생물이 생성되었습니다.");
}
}
class 동물 extends 생물 {
동물() {
// super(); // 부모 클래스의 생성자를 호출합니다. 생략가능합니다.
// 이 함수는 부모 클래스 생성자를 자동으로 호출합니다.
System.out.println("동물이 생성되었습니다.");
}
}
class 사람 extends 동물 {
사람() {
super(); // 부모 클래스의 생성자를 호출합니다.
// 이 함수는 부모 클래스 생성자를 자동으로 호출합니다.
System.out.println("사람이 생성되었습니다.");
}
}
class 오리 extends 동물{
오리(){
System.out.println("오리가 생성되었습니다.");
}
}
class 청둥오리 extends 오리{
청둥오리(){
System.out.println("청둥오리 생성되었습니다.");
}
}
위와 같이 부모 클래스부터 자손클래스 순으로
생물-동물-오리-청둥오리 이렇게 상속이 되어있는데,
생략 되어있는 super() 개념을 이용하여 순서가 어떻게 실행되는지
확인할수있다. 위와같이 코드를 작성하면 부모 -> 자손 클래스 순으로 호출되는것을 알수있다.(자손 클래스의 super()가 부모 클래스의 메서드를 호출하기 때문 따라서 매개변수가 없는 생성자() 가 계속해서 호출된다.)