Language/Java

[Java] 상속, super 키워드

ozofweird 2020. 6. 22. 16:43

1. 상속

새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능이 확장되는 클래스를 구현한다. 상속하는 클래스는 Parent 클래스, 상속받는 클래스는 Child 클래스로 정의한다. 상위 클래스를 일반적인 개념과 기능을 정의할 때, 하위 클래스는 보다 구체적인 개념과 기능을 정의한다. Java는 Single Inheritance로, extends 키워드 뒤에는 단 하나의 클래스만 사용이 가능하다.

Customer, VIPCustomer, CustomerTest

관계 설명
IS-A 관계 - 일반적인 개념(상위 클래스)과 구체적인 개념(하위 클래스)과의 관계
- 단순히 코드를 재사용하는 목적으로 사용하지 않음
HAS-A 관계 - 한 클래스가 다른 클래스를 소유한 관계
- 코드 재사용의 한 방법 (ex. Student 클래스에 Subject 객체가 존재할 경우)

※ private로 선언된 변수의 경우 외부 클래스에서 접근할 수 없기 때문에, 하위 클래스에서 접근할 수 있도록 protected 키워드를 사용한다.

 

 

 

2. super 키워드

기본적으로 하위 클래스가 생성 될 때, 상위 클래스가 먼저 생성 된다. 상위 클래스의 생성자가 호출되고 하위 클래스의 생성자가 호출된다. 하위 클래스의 생성자에서는 무조건 상위 클래스의 생성자가 호출되어야한다.

Heap 메모리 도식화
Customer
VIPCustomer
CustomerTest
구현 화면

※ this 키워드의 경우 자신의 메모리를, super 키워드는 상위 클래스의 메모리 위치 참조값을 지닌다.
※ this( )를 이용하여 다른 생성자 호출이 가능한것 처럼, super( )를 이용하여 상위 클래스의 생성자 호출이 가능하다.
※ 기본적으로 super 키워드를 생략을 해도, Pre-compile 단계에서 자동으로 super( ) 코드가 삽입이 된다.

 

 

 

3. super 응용

상위 클래스에서 생성자가 존재하지 않을 때, 기본 생성자가 기본적으로 제공이 되므로 문제 되지 않는다. 상위 클래스의 기본 생성자가 없고 매개변수가 있는 생성자가 존재할 경우, 하위 클래스는 명시적으로 상위 클래스의 생성자를 호출 해야한다.

Customer

1) 호출 방법 (1)

VIPCustomer

2) 호출 방법 (2)

VIPCustomer


[참고] github.com/ozofweird/Java_Practice

728x90