자바의 클래스 상속 Class Inheritance에 대해 알아봅니다.
상속 Inheritance
자바 클래스는 객체지향의 특성인 상속을 지원합니다.
어떤 클래스의 요소들을 재사용하고 싶을 경우, 클래스를 상속받아 확장하여 구현합니다.
두 클래스는 부모-자식/슈퍼-서브 관계가 성립됩니다.
상속받을(target) 클래스 정의 시 클래스명 작성 후 extends 키워드로 상속할(source) 클래스명을 작성합니다.
자식 클래스는 부모 클래스에서 접근 제한 private로 선언된 요소(멤버변수, 멤버함수)를 제외하고 모두 상속받습니다.
자식 클래스는 부모 클래스에서 상속받은 요소들을 자기 요소처럼 사용할 수 있습니다.
class Father {
String name;
int birth;
}
// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
int order;
}
부모 클래스 접근하기 - super, super()
자식 클래스가 부모 클래스와 동일한 이름의 멤버변수나 멤버함수를 가지고 있는 경우, 단순히 변수명이나 함수명을 호출하면 시스템은 자식 클래스와 부모 클래스 중 어느 요소로 접근해야 하는지 알 수 없습니다.
자신의 요소를 접근할 때 this 키워드를 사용하는 방식과 마찬가지로, 부모 클래스는 super 키워드로 접근합니다.
class Father {
String name;
int birth;
}
// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
int birth;
public void printBirth() {
System.out.println(this.birth); // Child.birth
System.out.println(super.birth); // Father.birth
}
}
상속 시 생성자 이슈
상속 관계를 설계한다면 상속하는(source) 클래스의 생성자에 신경을 써야 합니다.
source 클래스에 정의한 생성자가 있다면, 반드시 상속받는(target) 클래스에 생성자를 정의하여 super() 로 부모 생성자를 호출해야 합니다.
❗부모 생성자 호출 시 다른 로직을 실행하기 전인 생성자 가장 위에서 호출해야 합니다.
class Father {
String name;
int birth;
public Father() {
System.out.println("create father");
}
}
// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
int order;
public Child() {
super(); // 가장 위, 부모 생성자 호출
System.out.println("create child");
}
}
728x90
'Language > JAVA' 카테고리의 다른 글
[JAVA] 간단한 console 프로젝트 정수 계산기 프로그램 만들기 with IntelliJ (13) | 2024.04.03 |
---|---|
[JAVA] method Overloading vs. Overriding(메소드 오버로딩 vs. 오버라이딩) (1) | 2024.04.02 |
[JAVA] 변수 유효 범위, this와 접근 제어자(public, protected, private) (12) | 2024.03.31 |
[JAVA] 클래스 Class와 생성자 Constructor (1) | 2024.03.30 |
[JAVA] 객체지향 설계 5대 원칙 - SOLID (2) | 2024.03.29 |