상속 (Inheritance)
🤷♀️ 상속이란?
① 부모클래스에 만들어진 필드, 메소드를 자식클래스가 물려받음
② 유전과 유사
→ 부모가 자식에게 물려주는 것입니다!!
상속을 통해 동일한 특성을 재정의할 필요가 없어 자식클래가 간결해져 코드 효율성이 올라갑니다!!
상속이 없는 위 클래스들은 말하기, 먹기, 걷기, 잠자기라는 멤버가 중복되어 있습니다.
이 중복되는 멤버들은 메모리 낭비와 효율성이 떨어집니다.
상속을 받기 위해서는 중복 멤버변수인 말하기, 먹기, 걷기, 잠자기를 가진 Person 클래스를 먼저 생성하고 정의합니다.
각 클래스에 Person 클래스를 정의시켜주면 됩니다.
→ 이렇게 하게 되면 상속받은 클래스도 Person 클래스의 멤버변수를 사용할 수 있습니다.
★ Person 클래스는 상속받은 클래스의 멤버변수를 사용할 수 없습니다.
⭐ 서브클래스(자식클래스)는 슈퍼클래스(부모클래스)의 멤버변수와 메소드에 접근 가능하지만, 슈퍼클래스(부모클래스)는 서브클래스(자식클래스)의 멤버변수와 메소드에 접근 불가능합니다.
❄️ 상속의 장점
○ 클래스의 간결화
멤버의 중복 작성이 불필요하여 코드가 간결해집니다.
○ 클래스 관리 용이
클래스들의 계층적 분류가 되어 클래스 관리가 용이해집니다.
○ 소프트웨어의 생산성 향상
클래스 재사용과 확장에 용이합니다. 중복 멤버변수나 메소드가 없기 때문에 클래스를 재사용하여 작성할 수 있으며 클래스 생성 때 사용했던 중복된 멤버변수나 메소드 작성이 불필요하기 때문에 새로운 클래스의 작성 속도가 빨라집니다.
🧸 자바 상속 선언
public class Person {
...
}
public class Student extends Person { // Person을 상속받는 클래스 Student 선언
...
}
public class StudentWorker extends Student { // Student를 상속받는 StudentWorker 선언
...
}
extends 키워드를 사용하면 슈퍼클래스(부모클래스)를 확장한다는 개념입니다.
중복된 멤버변수와 메소드를 가지고 있는 Person 클래스를 생성하고 Person 클래스를 상속받는 Student 클래스를 생성합니다. StudentWorker 클래스는 Student 클래스를 상속받게 됩니다.
🎡 상속의 특징
○ 클래스의 다중 상속 지원하지 않음
○ 상속 횟수 무제한
○ 상속의 최상위 조상 클래스는 java.lang.Object 클래스
■ 모든 클래스는 자동으로 java.lang.Object를 상속받음
■ 자바 컴파일러에 의해 자동으로 이루어짐