JAVA/객체지향프로그래밍2

[JAVA] 상속(inheritance)

prize1209 2021. 6. 24. 17:45

상속이란?

 

- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.

- 두 클래스를 조상과 자손으로 관계를 맺어주는 것.

- 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)

- 자손의 멤버개수는 조상보다 적을 수 없다.(같거나 많다.)

 

새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름은 키워드 'extends'와 함께 써주면 된다.

 

상속해주는 클래스를 '조상 클래스', 상속받는 클래스를 '자손 클래스'라고 한다.

 

조상 클래스 부모(parent) 클래스, 상위(super)클래스, 기반(base)클래스

자손 클래스 자식(child) 클래스, 하위(sub) 클래스, 파생된(derived) 클래스 

 

클래스 간의 상속관계를 그림으로 표현한 것을 상속계층도(class hierarchy) 라고 한다.

 

 

 

 

조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받게 되지만, 자손의 변경은 조상에 영향을 미치지 않는다.

 

자손 클래스는 조상 클래스의 모든 멤버를 상속 받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다. 

상속에 상속을 거듭할수록 상속받는 클래스의 멤버 개수는 점점 늘어나게 된다. 

그래서 상속을 받는다는 것은 조상 클래스를 '확장(extends)' 한다는 의미로 해석할 수 있다. 

 

-생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. 

-자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 

 

- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.

 

 

Child 클래스와 Child2 클래스에 공통적으로 추가되어야 하는 멤버(멤버 변수나 메서드)가 있다면, 

이 두 클래스에 각각 따로 추가해주기보다는 이들의 공통 조상인 Parent에 추가해주는 것이 좋다. 

 

같은 내용의 코드를 하나 이상의 클래스에 중복적으로 추가해줘야하는 경우, 상속 관계를 통해서 코드의 중복을 최소화한다. 

 

 Child 클래스는 GrandChild의 직접 조상이고, Parent 클래스는 간접 조상이다. 

 

 

 

예1)

class Tv{
	boolean power;
	int channel;
	
	void power(){power = !power;}
	void channelUp() {++channel;}
	void channelDown() {--channel;}
	
}
class CaptionTv extends Tv{
	boolean caption;
	void displayCaption(String text) {
		if(caption) {
			System.out.println("text");
		}
	}
}

public class CaptionTvTest {
	public static void main(String[] args) {
		CaptionTv ctv = new CaptionTv();
		ctv.channel=10;
		ctv.channelUp();
		System.out.println(ctv.channel);
		ctv.displayCaption("Hello World");
		ctv.caption = true;
		ctv.displayCaption("Hello World");
	}
}

자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다. 

'JAVA > 객체지향프로그래밍2' 카테고리의 다른 글

[JAVA] import문  (0) 2021.07.07
[JAVA] super, super()  (0) 2021.06.28
[JAVA] Object클래스  (0) 2021.06.24
[JAVA] 단일 상속(single inheritance)  (0) 2021.06.24
[JAVA]포함(composite)  (0) 2021.06.24