본문 바로가기
JAVA/예제

[JAVA] 예제로 알아보는 상속 (2) 생성자와 super

by 부먹짱 2022. 4. 14.
반응형

(1) 상속의 개념과 IS-A 관계

 

[JAVA] 예제로 알아보는 상속 (1) 상속의 개념과 IS-A 관계

(2) 생성자와 super [JAVA] 예제로 알아보는 상속 (2) 생성자와 super 자바의 상속을 예제를 통해 정리하였다. (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 생성자 객체를 선

bumukisbest.tistory.com

 

(3) 오버로딩과 오버라이딩

 

[JAVA] 예제로 알아보는 상속 (3) 오버로딩과 오버라이딩

자바의 상속을 예제를 통해 정리하였다. ▽ 링크 (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 오버로딩 (Overloading) 상속과는 크게 관련없지만 오버라이딩과 함께 보면

bumukisbest.tistory.com

 

생성자

객체를 선언하면 생성자는 자동으로 호출된다.

상속 관계에서 자식 클래스를 생성하면 상위 부모 클래스부터 차례로 호출된다.

아래를 보면 알 수 있듯 자식 클래스에서 따로 호출하지 않아도 자동으로 부모 클래스의 생성자가 호출된다.

 

class Person {
    public Person(){
        System.out.println("this is parent");
    }
}; // 부모 클래스

class Minsu extends Person {
    public Minsu() {
		System.out.println("this is child");
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Minsu minsu = new Minsu(); // 자식 클래스 생성
	}
}

결과 화면

 

반응형

 

super()

super은 부모 클래스를 참조할때 사용한다. 그리고 super()은 부모 클래스의 생성자이다.

자식 클래스의 생성자는 자동으로 부모의 생성자를 호출하기 때문에 보통은 super()을 호출할 일이 없다.

 

하지만 만약 부모 생성자에 매개변수가 있다면 super이 필요해진다.

자바는 자동 호출의 경우 부모 클래스의 기본 생성자(매개변수가 없는 생성자)를 찾는데,

부모 클래스에 기본 클래스가 없고 매개변수가 존재하는 생성자만 존재할 경우 아래의 오류가 뜬다.

 

class Person {
    public Person(String str){
        System.out.println("this is parent : " + str);
    }
}; // 부모 클래스

class Minsu extends Person {
    public Minsu(){
		System.out.println("this is child");
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Minsu minsu = new Minsu();
	}
}

실행 결과 - 매개변수가 없음 오류

 

이때, 자식 생성자에서 super()을 사용하여 부모 생성자에 매개변수를 넘겨줘야한다.

 

class Person {
    public Person(String str){
        System.out.println("this is parent : " + str);
    }
}; // 부모 클래스

class Minsu extends Person {
    public Minsu(){
        super("minsu use super()"); // super을 통해 매개변수 전달
		System.out.println("this is child");
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Minsu minsu = new Minsu();
	}
}

결과 화면

 

반응형

댓글