티스토리 뷰
글을 들어가기 전
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(); 키워드를 사용하여, 부모 생성자를 호출해줘야 한다.
혹시 더 좋은 방법이 있다면 댓글로 피드백 부탁드리겠습니다! 감사합니다.
'💻 개발 > 언어' 카테고리의 다른 글
[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 |
- Total
- Today
- Yesterday