정의
- 기존 클래스에 기능 추가 및 재정의하여 새로운 클래스를 정의한다.
- 부모클래스(상위 클래스, 기초 클래스)는 상속 대상이 되는 기존 클래스를 의미.
- 자식클래스(하위 클래스, 파생 클래스)는 기존 클래스를 상속하는 클래스를 의미.
- 특정 클래스가 가지는 속성과 기능을 다른 클래스가 사용할 수 있게 한다.
- 부모 클래스의 필드와 메소드가 상속되며, 생성자와 초기화 블록은 상속되지 않는다.
특징
- 단일 상속만 지원하므로, 다중 상속은 불가능하다.
- 부모 클래스의 속성과 기능을 자식 클래스에서 자유롭게 사용할 수 있다.
- 생성자와 초기화 블록의 경우 상속되지 않는다.
- 부모 클래스의 private, default 멤버는 자식 클래스에서 접근이 불가능하다.
단, 동일한 패키지의 자식 클래스인 경우, 부모 클래스의 default 멤버에 접근이 가능하다.
- 클래스의 속성이나 기능을 다른 클래스에서 재사용할 수 있다.
- 중복 코드를 제거해서 가독성과 유지보수성이 높아지며, 개발 기간을 단축할 수 있다.
기본 사용 방법
- 두 클래스 사이의 상속관계를 "extends" 키워드를 이용하여 나타낸다.
public class 자식 클래스 extends 부모 클래스 {
// 필드
// 생성자
// 메소드
}
- 클래스의 속성이나 기능을 다른 클래스에서 재사용할 수 있다.
- 중복 코드를 제거해서 가독성과 유지보수성이 높아지며, 개발 기간을 단축할 수 있다.
super 키워드와 super()
super
- 부모 클래스와 자식 클래스의 멤버 이름이 같을 때 구분하는 키워드이다.
- 인스턴스의 주소가 저장되어 있으며, 숨겨진 채로 존재한다.
- static 메서드에서는 사용이 불가능하다.
super()
- 부모 클래스의 생성자를 호출할 때 사용된다.
- 생성자 첫 문장에서만 사용이 가능하다.
오버라이딩 (Overriding)
- 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용하는 것을 말한다.
- 오버로딩 조건
- 메소드의 이름, 리턴 타입, 매개변수가 동일하여야 한다.
- static, final, private 키워드가 지정된 메서드는 오버라이딩 할 수 없다.
- 부모 클래스의 메소드보다 접근제어자를 더 좁은 범위로 변경이 불가능하다.
- 부모 클래스의 메소드보다 더 큰 범위의 예외 선언이 불가능하다.
예제
// Person 클래스 - 사람
class Person {
String name;
int age;
Person() {}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public void printinfo() {
System.out.println("Person.printinfo");
System.out.println("name : " + name);
System.out.println("age : " + age);
}
}
// Student 클래스 - 학생
class Student extends Person {
String name;
int studentId;
Student(String name, int age, int studentId) {
super(name, age); // Person 클래스의 생성자를 호출하여 Person 클래스 변수 초기화.
this.name = name; // Student 클래스의 name 변수
super.name = name; // Person 클래스의 name 변수
this.age = age; // Person 클래스의 age 변수
this.studentId = studentId; // Student 클래스의 studentId 변수
}
// 오버라이딩
public void printinfo() {
System.out.println("Student.printinfo");
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("studentId : " + studentId);
}
}
public class Main {
public static void main(String[] args) {
System.out.println("=======================");
Student student = new Student("홍길동", 67, 1);
student.printinfo();
}
}
⊙ 참고 문헌
- 이병승, 「초보 개발자를 위한 자바:한 권으로 배우는 자바 마스터 가이드 북」, 영진닷컴, 2024, p398 - 458
- 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-08.상속」, 제로베이스, 2024, https://zero-base.co.kr/