객체지향 프로그램 4대 특징 중 하나
실세계에서의 상속은 상위 객체의 속성이 하위 객체에 물려줘서 하위 객체가 상위 객체의 속성을 모두 가지는 개념
자바에서의 상속은 자식클래스가 부모클래스의 속성을 물려 받고 기능을 추가하여 확장(extends)하는 개념
상속은 슈퍼클래스의 필드와 메서드를 물려받아서 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용을 줄일 수 있음
★★ 기존에 이미 잘 만들어진 클래스를 재사용하여 새로운 클래스를 생성하는 자바 문법 ★★
즉, 특정 클래스를 만들 때 기존 클래스의 데이터(속성)와 기능(메서드)을 그대로 물려 받아서 중복적인 코드를 없애줌 (클래스의 재사용, 코드의 중복을 없애줌)
자식과 부모의 관계로 형성이 되어 있음
==> 부모클래스 : Super, Parent 클래스 라고 하기도 함
==> 자식클래스 : Sub, Child 클래스 라고 하기도 함
==> 자식은 부모의 멤버보다 같거나 많음
상속의 대상은 멤버 (멤버변수, 멤버메서드)
==> 단, 생성자나 private 접근 제한을 갖는 멤버변수와 멤버메서드는 상속에서 제외
상속 시 사용되는 키워드 : extends
상속은 단일 상속만 가능함
==> 즉, 상속을 받을 수 있는 클래스는 하나임
상속의 장점은 클래스의 수정을 최소화시킬 수 있다는 장점이 있음. 또한 유지보수의 시간을 최소화시켜 줄 수 있음
형식)
[접근제한] class 자식클래스명 extends 부모클래스명 {
...........;
}
상속 관계 : "~ 은 ~ 이다" ==> is ~ a 관계
포함 관계 : "~ 은 ~ 를 가지고 있다" ==> has ~ a 관계
==> 사람은 (name, age, id) 를 가지고 있음
주의사항 : 부모클래스는 반드시 기존에 미리 정의되어 있어야 함!!
<예시>
Car 클래스 생성
// 부모 클래스
public class Car { // 자동차 클래스
// 멤버변수
int cc;
int door;
}
Sonata 클래스 생성(Car 클래스를 상속받을 것임!)

public class Sonata extends Car{ // extends 상속받을클래스명
String model; // 차량 모델명
// int cc; ==> 포함된 것
// int door; ==> 포함된 것
void getCarinfo() {
System.out.println("모델명 >>> " + model);
System.out.println("배기량 >>> " + cc);
System.out.println("차량 문 수 >>> " + door);
} // getCarinfo() 메서드 end
}
메인메서드로 받을 Car_01 클래스 생성

=============================코드=============================
public static void main(String[] args) {
/*
* Sonata 클래스 객체 생성 과정
* - Sonata 클래스의 객체 생성 시에 JVM은
* 우선적으로 Car 이라는 부모 클래스의 객체를
* 먼저 생성한 후에 그 다음에 Sonata 클래스의
* 객체를 생성함
*/
Sonata sonata = new Sonata();
sonata.model = "소나타";
sonata.cc = 2000;
sonata.door = 4;
sonata.getCarinfo();
}

부모의 멤버를 호출하는 명령어
형식) super.부모클래스멤버(멤버변수, 멤버메서드)
현재 클래스에 소속된 멤버를 호출하는 명령어
this 키워드는 현재 객체 자기 자신을 의미함
형식) this.현재(자식) 클래스멤버 (멤버변수, 멤버메서드)
<예시>
Car2 클래스 생성
=============================코드=============================
public class Car2 {
int cc;
int door;
String color = "검정색";
}
Car2 클래스를 상속받을 Avante 클래스 생성

=============================코드=============================
public class Avante extends Car2 {
String color = "흰색";
void getCarinfo() {
System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + color);
System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + super.color);
System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + this.color); // Avante클래스의 자신
}
}
메인메서드로 받을 Car_02 클래스 생성

=============================코드=============================
public static void main(String[] args) {
Avante avante = new Avante();
avante.cc = 1600;
avante.door = 4;
avante.getCarinfo(); // Car2에는 색상 : 검정색, Avante의 색상 : 흰색을 선언 시 흰색이 나옴 ==> 자식멤버가 더 우선!!!
// super.color를 줄 시 부모멤버가 출력
}
