상속
부모클래스의 멤버를 자식 클래스에게 물려줌. 잘 개발된 클래스를 재사용하여, 새 기능을 추가하거나 재정의.
부모클래스의 모든 것을 물려받는 것은 아니다. 부모 클래스에서 private 접근 제한을 갖는 필드/메소드는 상속 대상에서 제외된다.
💡 상속을 쓰는 이유?
코드를 재사용하기 때문에 중복 코드를 방지하여 코드가 간결해지고, 부모 클래스의 수정으로 자식 클래스들도 수정되는 효과가 있기에 유지 보수 효율을 높인다.
💡 자바에서 다중 상속이 안 되는 이유
예를 들어, 상속받은 여러개의 부모 클래스들에서 동일한 이름의 필드나 메소드가 있다면?
mother과 father라는 부모 클래스가 있고, 부모 클래스마다 각각 love()라는 메소드가 있다고 하자.
자식 클래스가 love()라는 메소드를 오버라이딩했는데, 자바는 이 상속 받은 love() 메소드가 어떤 부모 클래스에게 상속받았는지 알 수가 없는 모호함이 생긴다.
- 어떤 부모 클래스의 필드와 메소드를 상속받아야 하는가?
- 어떤 부모 클래스에 어떻게 접근해야 하나?
자바 상속 방법
//부모 클래스 생성
class 부모{
}
//부모 클래스 상속
class 자식 extends 부모{
}
자바 상속 예시
class People{
//필드(Feild)
String name; //이름
int age; //나이
//메소드(Method)
public void printMyself(){
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
}
class Student extends People{
//필드(Field)
int korean_scroe; //국어성적
int math_score; //수학성적
int english_score; //영어성적
//생성자(Constrouct)
Student(String name, int age, int kor_score, int mat_score, int eng_score){
super.name = name; //부모 필드
super.age = age; //부모 필드
this.korean_scroe = kor_score;
this.math_score = mat_score;
this.english_score = eng_score;
}
//메소드(Method)
public void printScore() {
System.out.println("국어성적 : " + korean_scroe);
System.out.println("수학성적 : " + math_score);
System.out.println("영어성적 : " + english_score);
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("홍길동", 18, 100, 90, 80);
student.printMyself(); //부모 메소드 호출
student.printScore(); //자식 메소드 호출
}
}
super 키워드
super 키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용한다.
참고
'Java' 카테고리의 다른 글
[Java] 디자인패턴 - 싱글톤 패턴, 템플릿 메소드 패턴, 팩토리 메소드 패턴 (0) | 2023.09.01 |
---|---|
[Java] 열거 타입(Enum) (0) | 2023.09.01 |
[Java] 추상클래스와 인터페이스의 공통점/차이점 (0) | 2023.09.01 |
[Java] 추상 클래스 (0) | 2023.09.01 |
[Java] static의 의미와 사용법 (0) | 2023.09.01 |