JAVA - 오버라이딩

이번 글은 오버라이딩 에대해

알아 보겠습니다


먼저 이전글에서 알아본 

오버로딩 과의 차이점을

간단하게 알아 보겠습니다


오버로딩은 같은이름으로 함수를

재정의 하고

오버라이딩은 자식클래스에서

부모 클래스의 함수를 재정의 합니다


즉 오버라이딩은 상속받은 메소드를

자신의 입맛에 맛도록 같은

메소드 이름에 내용만을 재수정 하는겁니다


간단하게 예시를 보겠습니다



먼저 TV 라는 클래스에서 채널과 볼륨을

출력한다. 하지만 시간이 지나

TV에 시간을 같이 출력해줘야 하는 일이생겼다

클래스를 새로 만들어서 채널과 볼륨을 출력하는

기능을 다시 만들기엔 시간이 아깝다.

그래서 TVX라는 클래스를 만들고

TV클래스를 상속받아 원래있던 기능에

시간출력을 위한 기능만 재정의 해준것이다

즉 부모클래스의 output()메소드를

재정의 해준것이다.


하지만 오버라이딩을

자기 맘대로 아무렇게나 만들면안된다.

오버라이딩엔 조건 있는데

1.자식클래스는 부모 클래스의 메소드와 이름이 같아야한다

2.매개변수가 부모의 메소드와 일치 해야한다

3.리턴타입이 부모의 메소드와 같아야한다

4.접근제어자는 부모클래스의 메소드보다

좁은 범위로 변경할수 없다

5.부모클래스의 메소드에 선언된

예외 처리 개수가 많거나 포함범위를

크게 선언 할 수없다.


마지막 조건에 대해서만 알아보자


부모메소드인 String output() throws Exception{}

이라고 예외 처리를 갖고 있다고 해보자

이때 오버라이딩하는 자식 메소드가 

String output() throws IOException{}

이라고 선언하면 이것은 가능한 일이다

하지만 자식 메소드가

String output() throws Exception{} 이라고

선언했다면 에러가 발생한다.

왜냐하면 Exception 에러 선언은 나머지

IOException, SQLException 보다 더큰

포함 범위를 가지기 때문이다

에러처리 개수는 부모가 2개이고

자식이 1개여서 조건에 맞지만

나머지 조건인 포함 범위를

크게 선언 할 수 없으므로 에러가

발생한다.



'JAVA' 카테고리의 다른 글

JAVA - 문자열 토큰(Token)  (0) 2018.02.01
JAVA - static변수  (0) 2018.02.01
JAVA - 메소드 오버로딩  (0) 2018.02.01
JAVA - 접근제어 지시자  (0) 2018.01.31
JAVA - OOP란?  (0) 2018.01.31

댓글

Designed by JB FACTORY