본문 바로가기

Java

[Java] 상속

상속

부모클래스의 멤버를 자식 클래스에게 물려줌. 잘 개발된 클래스를 재사용하여, 새 기능을 추가하거나 재정의.

부모클래스의 모든 것을 물려받는 것은 아니다. 부모 클래스에서 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 키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용한다.

 


참고

https://coding-factory.tistory.com/865