안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
상속의 특징
① 부모 필드/메소드를 자식 클래스 선언 없이 사용 가능
② 부모 클래스의 생성자와 초기화 블럭은 상속 불가 (자식 클래스에서 직접 선언하여 사용)
③ 부모의 private 멤버(필드,메소드)는 상속은 되지만 직접 접근이 불가!!
→ private 필드의 setting은 부모 생성자를 통해 호출
→ public setter를 사용
④ 모든 클래스는 Object클래스의 후손이므로, Object 메소드를 사용 혹은 재작성할 수 있음
생성자의 상속 여부
생성자는 자식 클래스로 상속이 불가합니다.
간단한 예제로 그 이유를 알아 보겠습니다.
class A {
//기본생성자
A() {
}
}
class B extends A {
}
A클래스와 A클래스를 상속하는 B클래스를 정의하였고, A클래스에서는 기본 생성자가 포함이 되어있을 것 입니다.
만일 생성자도 상속이 된다고 한다면, 아래와 같을 것입니다.
class A {
A() {
}
}
class B extends A {
A() {}
}
B클래스 내부에 있는 A() {~} 는 필드, 생성자, 메소드, 이너 클래스 중 무엇일까요?
우선 소괄호, 중괄호가 있으므로 필드와 이너클래스는 아닙니다.
생성자라고 하기엔 B 클래스명과 달라 생성자도 불가합니다. (생성자는 클래스명 동일 + 리턴타입이 없어야함)
메소드라고 하기엔 리턴타입이 없기 때문에 메소드도 아닙니다. (메소드는 반드시 리턴타입 포함)
따라서 만일 부모 클래스로부터 생성자를 상속받는다면 상속과 동시에 오류가 발생할 것입니다.
이러한 이유로 생성자는 상속이 불가합니다!
Do it! 자바 완전 정복을 참고하여 포스팅하였습니다.
'Java > Java' 카테고리의 다른 글
상속) 메소드 오버라이딩 (0) | 2022.03.21 |
---|---|
상속) 최상위 클래스 Object, toString(), equals(Object obj), hashCode(), clone() (0) | 2022.03.21 |
객체 지향 3대 원칙) 상속에 대해서, 상속 시 메모리 구조 (0) | 2022.03.21 |
배열) 객체 배열, VO class 설계 (0) | 2022.03.18 |
this키워드(this.)와 this()메소드 (0) | 2022.03.17 |