본문 바로가기

TIL/Java

[Java] 상속 - IS-A, super, super(), 오버라이딩(Overriding)

상속

- 부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술

- 멤버 외에 타입도 상속이 된다.

- 자바는 단일상속만 지원한다. (하나의 클래스만을 부모클래스로 가짐)

- 클래스 간의 상속 시에는 extends 키워드를 사용한다.

ex) public class Academy extends Company{ }	//Company가 부모 클래스

 

장점

- 새로운 클래스를 작성 시 기존에 작성된 클래스의 재사용 가능

- 클래스간 계층 관계가 형성되어 다형성 문법의 토대가 된다.

 

단점

- 부모클래스의 기능 변경시 자식클래스의 정상적인 동작 유무 예측이 힘들다.

- 자식클래스가 물려받아 사용하는 기능들을 부모클래스에서 변경 시 어려움이 따름

- 부모클래스로부터 물려받은 기능이 자식클래스에서는 무의미 할 수 있다.

- 장단점을 고려해볼 때 IS-A 관계로 구분되는 경우에만 사용해야 한다.

 

IS-A

- "자식클래스는 (하나의) 부모 클래스이다." 의 관계로 부모클래스의 멤버들을 자식클래스가 상속받는다.

- Circle is a Shape. => Circle 클래스는 하나의 Shape 클래스이다.

 

super

- 부모클래스의 인스턴스 주소를 보관하는 레퍼런스 변수

- 자식클래스 내의 모든 생성자와 메소드 내에서 부모클래스의 레퍼런스 변수를 사용할 수 있음

 

super()

- 부모생성자를 호출하는 구문으로 매개변수 타입, 개수, 순서가 일치하는 부모의 생성자를 호출한다.

- this()는 해당 클래스의 생성자를 호출하는 구문이다.

- super()는 부모클래스가 가지는 private 생성자를 제외한 나머지 생성자를 호출하는 구문이다.

 

오버라이딩 (Overriding)

- 부모클래스에서 상속받은 메소드를 자식클래스가 재정의하여 사용하는 것 (annotation 의 종류)

- 성립조건 : 메소드 이름 동일

                메소드 리턴 타입 동일

                매개변수의 타입, 개수, 순서가 동일

                private 메소드는 오버라이딩 불가능

                final 키워드가 사용된 메소드는 오버라이딩 불가능

                접근제한자는 부모 메소드와 같거나 더 넓은 범위여야 함

 

오버라이딩(Overriding) 오버로딩(Overloading)
하위 클래스에서 메소드 정의 같은 클래스에서 메소드 정의
메소드 이름 동일
매개변수 동일(갯수, 타입, 순서)
리턴 타입 동일
메소드 이름 동일
매개변수 다름(갯수, 타입, 순서)
리턴 타입 상관 없음
자식 메소드의 접근 범위가
부모 메소드의 접근 범위보다 넓거나 같아야 함
접근제어자와 상관 없음
자식 메소드의 예외처리 수가
부모 메소드의 예외처리 수보다 적거나 범위가 좁아야 함
예외처리와 상관 없음