Java

Java 상속(inheritance)

다시초심으로 2024. 1. 24. 14:34

상속이란?
기존에 사용하고 있던 클래스를 이용하여서 새로운 클래스를 작성하는 것이다.

왜 사용하나?
상속을 통해서 클래스를 작성하면 적은 양의 코드로 새로운 클래스를 작성할 수 있고,
코드를 공통으로 관리하기 때문에 코드의 추가및 변경이 매우 용이하기 때문이다.

Chile 클래스와 Parent 클래스가 있다고가정하면

class Child extends Parent {
		// ...
}

이렇게 작성하면 된다.
이 두 클래스는 서로 상속 관계에 있다고 한다.
상속해주는 오른쪽 클래스를 "조상 클래스" 라고 하며,  왼쪽에 상속받는 클래스를 "자손 클래스"라고한다.

조상 클래스   부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스   자식(chile)클래스, 하위(sub)클래스, 파생된(derived) 클래스

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

class Parent{
	int age;
}
class Child extends Parent{
	// ...
}

이렇게 만약 Parent(부모)클래스에 age라는 정수형 변수를 멤버변수로 추가하면, 
자손 클래스는 조상의 멤버를 모두 상속받기 때문에,
Child(자손)클래스는 자동적으로 age라는 멤버변수가 추가된것과 같은 효과를 얻는다.

클래스 클래스의 멤버
Parent age
Child age

 

class Child extends Parent{
	void study(){
    	System.out.println("공부하기");
    }
}

이렇게 Parent클래스를 상속받는 Child클래스에 study() 메소드를 넣는다면, 이렇게 된다.

클래스 클래스의 멤버
Parent age
Child age, study()

자손클래스에 새로운 멤버가 추가되어도 조상클래스에는 아무런 영향도 주지않는다.
이로써, 자손클래스는 조상 클래스의 모든 멤버를 상속받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다.

즉, 상속에 상속을 거듭할수록(Child클래스를 상속받는 다른 클래스) 상속받는 클래스의 멤버 개수는 계속 늘어난다.

물론, 멤버변수와 메소드는 상속되지만, 생성자와 초기화블럭은 상속되지 않는다.