본문 바로가기

Language/JAVA

[JAVA] Class Inheritance 클래스 상속

JAVA 클래스 상속 Class Inheritance

 

자바의 클래스 상속 Class Inheritance에 대해 알아봅니다.

 


 

상속 Inheritance

자바 클래스는 객체지향의 특성인 상속을 지원합니다.

어떤 클래스의 요소들을 재사용하고 싶을 경우, 클래스를 상속받아 확장하여 구현합니다.

두 클래스는 부모-자식/슈퍼-서브 관계가 성립됩니다.

 

상속받을(target) 클래스 정의 시 클래스명 작성 후 extends 키워드로 상속할(source) 클래스명을 작성합니다.

자식 클래스는 부모 클래스에서 접근 제한 private로 선언된 요소(멤버변수, 멤버함수)를 제외하고 모두 상속받습니다.

자식 클래스는 부모 클래스에서 상속받은 요소들을 자기 요소처럼 사용할 수 있습니다.

class Father {
	String name;
    int birth;
}

// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
	int order;
}

 

부모 클래스 접근하기 - super, super()

자식 클래스가 부모 클래스와 동일한 이름의 멤버변수나 멤버함수를 가지고 있는 경우, 단순히 변수명이나 함수명을 호출하면 시스템은 자식 클래스와 부모 클래스 중 어느 요소로 접근해야 하는지 알 수 없습니다.

자신의 요소를 접근할 때 this 키워드를 사용하는 방식과 마찬가지로, 부모 클래스는 super 키워드로 접근합니다.

class Father {
	String name;
    int birth;
}

// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
	int birth;
    
    public void printBirth() {
    	System.out.println(this.birth);		// Child.birth
        System.out.println(super.birth);	// Father.birth
    }
}

 

상속 시 생성자 이슈

상속 관계를 설계한다면 상속하는(source) 클래스의 생성자에 신경을 써야 합니다.

source 클래스에 정의한 생성자가 있다면, 반드시 상속받는(target) 클래스에 생성자를 정의하여 super() 로 부모 생성자를 호출해야 합니다.

❗부모 생성자 호출 시 다른 로직을 실행하기 전인 생성자 가장 위에서 호출해야 합니다.
class Father {
	String name;
    int birth;
    
    public Father() {
    	System.out.println("create father");
    }
}

// Child 클래스가 Father 클래스를 상속받음
class Child extends Father {
	int order;
   
    public Child() {
    	super();	// 가장 위, 부모 생성자 호출
    	System.out.println("create child");
    }
}

 

728x90