상속(inheritance)
- 부모클래스에 만들어진 필드, 메소드를 자식클래스가 물려받음.
- 상속을 통해 간결한 자식 클래스 작성. 동일한 특성을 재정의할 필요가 없어서 간결해진다.
상속의 장점
- 클래스의 간결화 - 멤버의 중복 작성이 불필요하다.
- 클래스 관리 용이 - 클래스들의 계층적 분류
- 소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이, 새로운 클래스의 작성 속도가 빠르다.
상속의 특징
- 클래스의 단일 상속만 지원
- 상속 횟수는 무제한
- 상속의 최상위 조상 클래스는 java.lang.Object클래스 - 모든 클래스는 컴파일러에 의해 자동으로 java.lang.Object를 상속받음.
상속 선언
public class Person {
...
}
public class Student extends Person { // Person을 상속받는 클래스 Student 선언
...
}
public class StudentWorker extends Student { // Student를 상속받는 클래스 StudentWorker 선언
...
}
객체 생성
서브클래스에서 슈퍼클래스의 멤버 접근
상속과 접근 지정자
- 슈퍼 클래스의 private멤버 - private멤버는 다른 모든 클래스에 접근 불허, 클래스 내의 멤버들에게만 접근 허용
- 슈퍼 클래스의 default 멤버 - 패키지 내의 모든 클래스에 접근 허용
- 슈퍼 클래스의 public 멤버 - 다른 모든 클래스에 접근 허용
- 슈퍼 클래스의 protected 멤버 - 같은 패키지 내의 모든 클래스 접근 허용, 다른 패키지에 있어도 서브 클래스는 슈퍼 클래스의 protected 멤버 접근 가능
서브 클래스 / 슈퍼 클래스의 생성자 호출 및 실행
new에 의해 서브 클래스의 객체가 생성될 때
- 슈퍼 클래스 생성자와 서브 클래스 생성자 모두 실행된다.
- 호출 순서 - 서브 클래스의 생성자가 먼저 호출, 서브 클래스의 생성자는 실행 전 슈퍼 클래스 생성자 호출
- 실행 순서 - 슈퍼 클래스의 생성자가 먼저 실행된 후, 서브 클래스의 생성자 실행
슈퍼 클래스 생성자 호출 방법
class A {
int x;
public A() {
x = 0;
}
}
class B extends A {
int y;
public B() {
super(); // 생성자의 첫 번째 코드, super() 호출을 하지 않으면 컴파일러가 자동으로 추가한다.
y = 0;
}
}
public class C {
public static void main(String[] args) {
B obj = new B();
...
}
슈퍼 클래스와 서브 클래스의 생성자 간의 호출 및 실행 관계