본문 바로가기
프로그래밍 언어/JAVA

[JAVA] 상속/super

by 느링 2017. 8. 18.

상속(inheritance)이란?

기존의 클래스를 재사용해서 새로운 클래스를 작성하는 입니다.

즉 하위 클래스(자식 클래스)가 상위 클래스(부모 클래스)의 멤버를 사용할 수 있는 것입니다.

또한 부모는 자식에게 자신의 멤버를 제공해줍니다.

자식 클래스의 멤버개수가 부모 클래스보다 적을 수 없습니다. (같거나 많아야 합니다.)

 

**동의어 정리**

- 조상 클래스 = 부모 클래스 = 상위 클래스 = 기반 클래스

- 자손 클래스 = 자식 클래스 = 하위 클래스 = 파생된 클래스

 

**표현법**

extends를 사용합니다.

자식은 부모에게 (상속 받은 것) + (자신의 것)을 사용할 수 있습니다.

상속은 클래스를 재사용하기 때문에 코드의 중복을 줄여줍니다. 또한 개발의 시간을 단축시킬 수 있어 매우 유용합니다.

 

<예제 1>

 

B는 A라는 클래스를 선택하여 상속을 합니다. 상속을 하기 위해서는 클래스 이름 옆에 extends라는 키워드를 붙이고 상속할 클래스를 씁니다.

 

B클래스는 A클래스에서 정의된 메소드를 오버라이딩 했으며 해당 메소드 안에 부모의 필드 변수 a를 사용했습니다.

 

super

super은 this와 비슷한 개념으로 this가 자신의 멤버변수, 생성자를 뜻했다면 super은 상위 클래스의 멤버변수, 생성자를 뜻합니다.

사실 상속을 받게 되면 상속받은 멤버도 this로 표현할 수 있으나 이름의 중복이 있을 수 있으므로 super을 사용해 구분해 줍니다.

 

① 참조 변수 super

this와 비슷한 개념, 상속 받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때 super을 사용해서 구별할 수 있다.

 

<예제 1>

 

<예제 2>

 

 

② 조상의 생성자 super( )

this( )와 마찬가지로 super( )도 역시 생성자입니다. 조상 클래스의 생성자를 호출합니다.

자손 클래스의 인스턴스가 조상 클래스의 멤버와 메소드를 모두 쓸 수 있어야 하기 때문에, 자손 클래스의 인스턴스 생성 시 조상 클래스의 멤버에 대한 초기화도 반드시 필요합니다. 때문에 자손 클래스의 생성자 첫 줄에서 조상 클래스의 생성자를 호출해야 합니다.

이렇게 조상 클래스의 생성자 호출은 클래스의 상속관계를 거슬러 올라가면서 계속 반복됩니다. 그리고 마지막으로 모든 클래스의 최고 조상인 Object클래스의 생성자인 Object()까지 가서야 끝이 납니다.

그래서 Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 반드시 자신의 다른 생성자 또는 조per상의 생성자를 호출해야 합니다. 그렇지 않으면 컴파일러는 생성자의 첫 줄에 super( );를 자동으로 추가할 것입니다.