[JAVA] Super() 키워드 예제 / Super 부모, 자식

2022. 9. 9. 18:57·💻 개발/언어
728x90
반응형

글을 들어가기 전

 

1. 부모가 생성돼야 자식이 존재한다.

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

 

1.  예시를 통해 살펴보기


[예시로 선언한 클래스를 살펴보자.]

아래와 같이 3개의 클래스가 존재한다고 가정하고, 각각을 부모, 자식, 실행이라는 단어로 부르겠다.

부모: Car.class,

자식: Truck.class,

실행파일: TruckExam.class

 

[Car.class]

Car를 명시한 부모 클래스

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

[Truck.class]

Car 부모를 상속받은 Truck 자식

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

 

[TruckExam.class]

Truck 생성자를 선언해서 실행하는 부분

public class TruckExam{
	public static void main(String[] args) {
		Truck t = new Truck();
		Car c = new Car();
	}
}

 

2. 코드 분석 


[결과]

1. Car의 기본 생성자 입니다.
2. Truck의 기본 생성자 입니다.

 

 

 

부모: Car

자식: Truck

실행: TruckExam 

 

TruckExam이 실행되면 Truck 생성자가 실행되고, Truck 생성자가 실행되면, 부모인 Car생성자가 실행된다.

 

 

 

3. Super() 키워드를 사용해야하는 이유


[부모 클래스에 기본 생성자가 없을 경우  오류 발생]

Super()는 부모의 생성자를 가리킨다.

 

[Car.class]

public class Car { 
	public Car(String notice) { 
    	System.out.println("Car의 기본 생성자가 변경되었습니다.");
    }
   }

부모인 Car.class의 기본 생성자에 파라미터가 추가되어 기본 생성자가 없다면?

 

 

[Truck.class]

public class Truck extends Car { 
	public Truck() { //에러발생
    	System.out.println("Truck의 기본생성자입니다");
	}
}

자식의 Truck() 생성자에서 오류가 발생한다.

이럴 경우 Super(); 키워드를 사용하여 개발자가 부모 생성자를 호출해 줘야 한다.

 

부모 생성자를 자식이 생성하지 않는다면, 컴파일러는 부모의 기본 생성자를 호출하게 되어 있다. 

하지만 부모 클래스는 기본 생성자를 가지고 있지 않다. 

그렇다면 자식 클래스에 오류가 발생한다. 

이때 Super(); 키워드를 사용하여, 부모 생성자를 호출해줘야 한다. 

 

 

 

혹시 더 좋은 방법이 있다면 댓글로 피드백 부탁드리겠습니다! 감사합니다.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > 언어' 카테고리의 다른 글

[SQL] AES 전화번호 복호화시 [blob] 문제 해결하기  (0) 2022.11.16
[SQL] varchar(50)은 몇 글자를 저장할 수 있을까?  (0) 2022.11.08
[JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)  (2) 2022.09.09
[JAVA](모든 시도 해봄) / java.lang.ClassNotFoundException 오류 해결  (4) 2022.03.12
[JavaScript] 프로미스와 프로미스 API구조  (0) 2021.10.19
'💻 개발/언어' 카테고리의 다른 글
  • [SQL] AES 전화번호 복호화시 [blob] 문제 해결하기
  • [SQL] varchar(50)은 몇 글자를 저장할 수 있을까?
  • [JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)
  • [JAVA](모든 시도 해봄) / java.lang.ClassNotFoundException 오류 해결
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (72)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (13)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (15)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (1)
        • 제품리뷰 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
foodev
[JAVA] Super() 키워드 예제 / Super 부모, 자식
상단으로

티스토리툴바