7.1 상속 개념
상속의 개념
- 상속은 다른 클래스 간의 관계를 설정하고 계층적 순서로 정보를 관리하며 코드를 재사용하는 데 도움됨
- 새로운 클래스를 만들 때, 원하는 코드 중 일부가 포함된 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생(상속)시킬 수 있음
- 기존 클래스의 멤버 변수와 메서드를 재사용할 수 있음
상속의 필요성
- 상속: 기존 클래스의 기능을 사용하여 새 클래스를 만드는 기술
- 한 클래스가 다른 클래스의 특징(멤버 메서드와 변수)을 가져오도록 하는 자바 객체지향 프로그래밍의
필수적인 부분, 클래스 간의 관계를 더 잘 이해할 수 있고 프로그램 구조를 더욱 조직화할 수 있기 때문에
코드의 가독성과 해석 가능성이 향상됨
- 응용 프로그램의 유지·관리에 유용함
상속
- 부모 클래스의 필드와 메소드를 자식 클래스에게 물려줄 수 있음.

부모 클래스 = 수펴 클래스, 기본 클래스
- 다른 클래스에 멤버 요소(메서드와 변수)를 상속하는 클래스로 상위 클래스.
자식 클래스 = 서브 클래스, 파생 클래스
- 다른 클래스의 멤버 요소를 상속받은 클래스로 하위 클래스
- 자식 클래스는 부모 클래스의 모든 멤버 요소를 소유할 뿐만 아니라 그 밖에도 고유한 멤버 메서드와 변수를 추가할 수 있음.
7.2 클래스 상속
- 자식 클래스를 선언할 때 어떤 부모로부터 상속받을 것인지를 결정하고, 부모 클래스를 다음과 같이 extends 뒤에 기술.
public class 자식클래스 extends 부모클래스 {
}
- 다중 상속 허용하지 않음. extends 뒤에 하나의 부모 클래스만 상속 (cpp이 다중 상속을 허용하는것과 달리 java는 다중 상속을 지양함)

Is-A 관계 (is a relationship)

- Is-A 관계는 상속을 나타냄.
- '~는 ~이다' 라는 의미, 부모-자식 관계
- extends, implements 키워드로 구현함.
- 모든 클래스는 java.lang.Object의 하위 클래스이다.

7.3 상속의 유형
7.3.1 단일 상속

- 클래스가 하나의 클래스에 의해서만 확장되는 것으로, 단일 수준 상속 이라고도 함.
- 단일 부모 클래스에서 자식 클래스를 만들기 때문에 기본 클래스(부모 클래스)와 파생 클래스(자식 클래서)가 각각 하나 뿐임.
- 자식 클래스는 기본 클래스로부터만 속성과 행동을 상속받고 부모 클래스의 모든 메서드와 변수에 접근할 수 있음.
7.3.2 다단계 상속

- 클래스가 하나의 클래스에 상속하고, 상속받은 자식 클래스가 또 다른 클래스에 상속하는 것을 말함.
7.3.3 계층적 상속

- 단일 부모 클래스의 값과 메서드를 여러 자식 클래스에 전달하는 것.
- 한 클래스가 부모 클래스로 사용되고 나머지 클래스는 자식 클래스가 됨.
7.3.4 상속의 유형
1) 부모 생성자 호출
- 자식 객체를 생성하면 부모 객체가 먼저 생성된 다음 자식 객체가 생성된다.
- 부모 생성자는 자식 생성자의 맨 첫줄에 숨겨져 있는 super()에 의해 호출됨.
//자식생성자 선언
public 자식클래스(String model, String color){
super(); // 생략 가능.
this.model = model;
this.color = color;
}
2) super를 이용한 부모 클래스 참조
- 자바의 상속에서 자식 클래스가 부모 클래스로부터 상속을 받으면 자식 클래스는 부모 클래스를 참조하기 위해 super 키워드를 사용
// super 키워드를 이용하여 부모 클래스의 멤버 요소에 접근.
class SuperCat {
String name;
void printInfo() {
System.out.println("부모 고양이입니다.");
}
}
class SubKitten extends SuperCat {
String name;
void printInfo() {
System.out.println("아기 고양이입니다.");
}
void printDetail() {
super.printInfo();
printInfo();
super.name = "SuperCat";
name = "SubKitten";
}
}