객체지향개념적 요소로 크게 상속, 다형성, 캡슐화, 추상화, 인터페이스 등이 있다.
그 중 상속은 이후에 다루게 될 다형성과도 많은 연관이 있다.
객체지향의 중요한 개념인 상속에 대해 알아보자
상속(inheritance)이란?
- 기존의 클래스를 재사용해서 새로운 클래스를 작성
- 두 클래스를 부모와 자식으로 관계를 맺음
- 자식과 부모의 모든 멤버를 상속(생성자, 초기화블록 제외)
- 자식의 멤버개수는 부모보다 같거나 많다
클래스 종류
부모클래스 : 부모클래스(parent), 상위클래스(super), 기반 클래스(base)
자식클래스 : 자식클래스(child), 하위클래스(sub), 파생된 클래스(derived)
상속 사용 방법
class 자식클래스 extends 부모클래스 {
...
}


자바는 단일 상속만을 허용한다.
자식 클래스가 변하더라도 부모 클래스는 변하지 않는다.
부모 클래스가 변하게 되면 모든 자식 클래스들이 영향을 받는다.
GrandChild가 Child를 상속하면서 Child2를 상속할 수 없다.
위의 오른쪽 그림처럼 상속을 받으면 자식 클래스는 부모클래스를 포함한다.
class GrandChild extends Child, Child2 { // 불가, 단일 상속만 허용
...
}
포함(composite)이란?
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다.

좌측의 코드는 기존 Circle 클래스이고,
우측은 Point 클래스를 Circle 클래스에서 int타입의 멤버변수 x, y를 선언하는 대신
Point c = new Point(); 를 통해 Point 클래스 타입의 참조변수 c를 선언해서 사용하였다.
상속 vs 포함
클래스를 정의할 때 관계를 통해 재사용성을 높이는 것이 중요하다.
상속과 포함 둘 중 어느 것을 사용할 거인지 파악하기는 쉽지 않다.
상속: 원은 점이다. (is-a 문장)
포함: 원은 점을 가지고 있다. (has-a 문장)
=> 좀 더 매끄러운 문장이 되게끔 만들어주면 된다.
기존의 클래스에 새로운 기능이 추가된 클래스를 만들 때 상속관계 그렇지 않은 경우 포함관계로 만든다.
'Java' 카테고리의 다른 글
자바 static 과 final, 추상화(abstract) 개념 정리 (0) | 2022.01.05 |
---|---|
자바 오버라이딩 개념정리 (오버라이딩 오버로딩 차이) (0) | 2022.01.05 |
자바 Random() 함수를 이용하여 로또생성 프로그램 만들기 (0) | 2022.01.05 |
자바 클래스 및 객체와 인스턴스의 구분 (0) | 2022.01.01 |
public static void main(String[] args)는 무슨 의미일까? (0) | 2022.01.01 |
댓글