상속(inheritance)이란?
- 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것
- 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나
- 기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아 새로운 클래스를 생성할 수 있다.
- 관련 용어
- 부모 클래스(parent class) or 상위 클래스(super class) or 기초 클래스(base class)
- 기존에 정의되어 있던 클래스
- 자식 클래스(child class) or 하위 클래스(sub class) or 파생 클래스(derived class)
- 상속을 통해 새롭게 작성되는 클래스
- 부모 클래스(parent class) or 상위 클래스(super class) or 기초 클래스(base class)
상속의 장점
- 기존에 작성된 클래스를 재활용 가능
- 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면
자식 클래스에서는 해당 멤버를 작성하지 않아도 된다. - 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련
사용 방법
//원형
class 자식클래스이름 extend 부모클래스이름 {
//내용
}
//s:예시
class Parent {
private int a = 10;
public int b = 20;
}
class Child extends Parent {
public int c = 30;
void display() {
System.out.println(a); //상속받은 private 필드 참조 (private로는 접근 불가하기 때문에 오류 발생)
System.out.println(b); //상속받은 public 필드 참조
System.out.println(c); //public 필드 참조
}
}
//e:예시
super 참조 변수
- 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수
- 인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 인스턴스 변수 앞에 this 키워드를 사용하여 구분 가능
- 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별 가능
- 부모 클래스의 멤버에 접근할 수 있습니다.
- 인스턴스 메소드에만 사용할 수 있다.
- 클래스 메소드에서는 사용할 수 없다.
- 사용 예시
class Parent {
int a = 10;
}
class Child extends Parent {
void display() {
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
}
}
super() 메소드
- 부모 클래스의 생성자를 호출하는 메소드