나의 지식 보관소
리턴타입(반환형)이 다른 메서드 오버라이딩 본문
테스트 주도 개발에 대한 책을 보던 중 이상한 코드를 발견했다 추상클래스의 추상메서드를 하위 클래스에서 오버라이딩하는데 리턴타입이 다른데도 컴파일이 정상적으로 됐다. 분명 상속관계에서 메소드 오버라이딩은 리턴타입, 메소드 이름, 매개변수가 완전히 동일해야 이루어진다고 배웠었는데.. 하고 검색해보니 자바한정으로 ( 사실 다른언어도 되는진 잘 모르겠는데 C#에서는 안되는걸 확인했다. ) 다음 두가지 조건을 만족하면 리턴타입이 달라도 오버라이딩이 허용된다.
- 반환형이 원시타입이 아닌경우
- 상위 클래스의 메서드의 반환형으로 오버라이드된 메서드의 반환형이 자동 형변환이 가능한 경우
class Base
{
public Object display(String obj)
{
System.out.println("Base.display() " + obj);
return "0";
}
}
class Derived extends Base
{
@Override
public String display(String obj)
{
System.out.println("Derived.display() " + obj);
return "Derived";
}
}
'프로그래밍 언어 > 자바' 카테고리의 다른 글
public class ( the public type must be defined in its own file ) (0) | 2020.12.18 |
---|---|
vscode에서 src/main/java 폴더 구조 만들기 (0) | 2020.10.15 |
동기화 메서드와 동기화 블록 (Synchronized Method, Synchronized Block) (0) | 2020.04.16 |
정규표현식 정리 표 (0) | 2020.04.01 |
예외 떠넘기기 (0) | 2020.02.28 |