[기본 개념] 2 | (1.1) 상속
1> 상속의 정의와 장점
2 클래스간의 관계 - 포함관계
3 클래스간의 관계 결정하기
4 단일상속(single inheritance)
5 Object클래스 - 모든 클래스의 조상
1. 상속의 정의와 장점
상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 적은 양의 코드를 사용할 수 있고, 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 편하다.
상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써주기만 하면 된다.
예를 들어 새로 작성하려는 클래스의 이름이 Child이고 상속받고자 하는 기존 클래스의 이름이 Parent라면 다음과 같이 하면 된다.
class Child extends Parent {
// · · ·
}
이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속받는 클래스를 '자손 클래스'라고 한다.
조상 클래스 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스
자손 클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, Child클래스는 Parent클래스의 멤버들을 포함한다고 할 수 있다.
만일 Parent클래스에 age라는 정수형 변수를 멤버변수로 추가하면, Child클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.
class Parent {
int age ;
}
class Child extends Parent { }
클래스 | 클래스의 멤버 |
Parent | age |
Child | age |
반대로 자손인 Child클래스에 새로운 멤버로 play( ) 메서드를 추가해보자.
class Parent {
int age ;
}
class Child extends Parent {
void play( ) {
System.out.println("놀자!") ;
}
}
클래스 | 클래스의 멤버 |
Parent | age |
Child | age, play( ) |
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
이번엔 Parent클래스로부터 상속받는 Child2클래스를 새로 작성해보자.
class Parent { }
class Child extends Parent { }
class Child2 extends Parent { }
이 때, Child와 Child2간에는 서로 아무 관계도 성립되지 않는다. 형제 관계와 같은 것은 없다.
여기에 또다시 Child클래스로부터 상속받는 GrandChild라는 새로운 클래스를 추가한다면 다음과 같을 것이다.
class Parent { }
class Child extends Parent { }
class Child2 extends Parent { }
class GrandChild extends Child { }
여기서 Child클래스는 GrandChild클래스의 직접 조상이고, Parent클래스는 GrandChild클래스의 간접 조상이 된다.
이제 Parent클래스에 전과 같이 정수형 변수인 age를 멤버변수로 추가해 보자.
class Parent {
int age ;
}
class Child extends Parent { }
class Child2 extends Parent { }
class GrandChild extends Child { }
클래스 | 클래스의 멤버 |
Parent | age |
Child | age |
Child2 | age |
GrandChild | age |
자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진
하나의 인스턴스로 생성된다.
출처 | Java의 정석 (남궁 성)
'💠프로그래밍 언어 > Java' 카테고리의 다른 글
[기본 개념] 2 | (1.3) 단일상속, Object 클래스 (0) | 2021.11.18 |
---|---|
[기본 개념] 2 | (1.2) 클래스 간 관계 (0) | 2021.11.18 |
[기본 개념] 1 | (5.1) 변수의 초기화 (0) | 2021.09.01 |
[기본 개념] 1 | (4.1) 생성자 (0) | 2021.08.25 |
[기본 개념] 1 | (3.1) 오버로딩 (0) | 2021.08.24 |