java) 생성자

박우영·2023년 2월 24일
0

메서드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메서드를 생성자(Constructor)라고 한다

생성자의 규칙

  • 클래스명과 메서드명이 동일하다.
  • 리턴타입을 정의하지 않는다. (void도 사용하지 않는다.)

생성자는 객체가 생성될 때 호출된다. 즉, 생성자는 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()가 부모 클래스의 메서드를 호출하기 때문 따라서 매개변수가 없는 생성자() 가 계속해서 호출된다.)

0개의 댓글