본문 바로가기
Java

[자바 입문] super와 부모생성자

by sangyunpark 2023. 8. 16.

super와 부모생성자

class가 인스턴스화 될때 생성자가 실행되면서 객체의 초기화를 한다. 그 때 자신의 생성자만 실행되는 것이 아니라, 부모 생성자부터 실행된다.

 

부모 생성자

public Class Car{
	public Car(){
    	System.out.println("Car의 기본생성자입니다.");
    }
}

public class Bus extends Car{
	public Bus(){
    	System.out.println("Bus의 기본생성자입니다.");
    }
}

생성자 테스트

public class BusExam{
	public static void main(String[] args){
    	Bus b = new Bus();
    }
}

결과

Car의 기본생성자입니다.
Bus의 기본생성자입니다.

 

new 연산자로 Bus객체를 생성하면, Bus객체가 메모리에 올라갈때 부모인 Car도 함께 메모리에 올라간다.

생성자는 객체를 초기화 하는 일을 한다.

생성자가 호출될 때 자동으로 부모의 생성자가 호출되면서 부모객체를 초기화 하게된다.

 

super

자신을 가리키는 키워드가 this라면, 부모를 가리키는 키워드 super

super()는 부모의 생성자를 의미한다.

부모의 생성자를 임의로 호출하지 않으면, 부모 class의 기본 생성자가 자동으로 호출된다.

super()를 호출하나 호출하지 않으나 결과가 같다.

public Bus(){
	super();
    System.out.println("Bus의 기본 생성자입니다.");
}

 

부모의 기본생성자가 아닌 다른 생성자를 호출하는 방법

클래스는 기본 생성자가 없는 경우도 존재한다.

public class Car{
        public Car(String name){
            System.out.println(name + " 을 받아들이는 생성자입니다.");
        }
    }

Car class를 위처럼 수정하면, Bus 생성자에서 컴파일 오류가 발생한다.

부모가 기본생성자가 없기 때문에 컴파일 오류가 발생하게 된다.

이러한 문제를 해결하기 위해서는 자식 클래스의 생성자에 직접 부모의 생성자를 호출해야 한다.

 

public Bus(){
	super("소방차"); // 문자열을 매개변수로 받는 부모 생성자를 호출
    System.out.println("Bus의 기본 생성자입니다.");
}

super키워드는 자식에서 부모의 메소드나 필드를 사용할 때도 사용한다.

 

Super와 부모 생성자

https://school.programmers.co.kr/learn/courses/5/lessons/392#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

public class Bus extends Car {
    int fee;
    
    public Bus(String name, int number, int fee) {
        // super를 이용해서 Car클래스의 생성자를 이용하세요.
        super(name,number);
        this.fee = fee;
    }
}

'Java' 카테고리의 다른 글

[자바 입문] 클래스 형변환  (0) 2023.08.18
[자바 입문] 오버라이딩  (0) 2023.08.18
[자바 입문] 추상 클래스  (0) 2023.08.16
[자바 입문] 접근제한자  (0) 2023.08.16
[자바 입문] 상속  (0) 2023.08.16