Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

리턴타입(반환형)이 다른 메서드 오버라이딩 본문

프로그래밍 언어/자바

리턴타입(반환형)이 다른 메서드 오버라이딩

야식은진리다 2020. 10. 18. 17:48

테스트 주도 개발에 대한 책을 보던 중 이상한 코드를 발견했다 추상클래스의 추상메서드를 하위 클래스에서 오버라이딩하는데 리턴타입이 다른데도 컴파일이 정상적으로 됐다. 분명 상속관계에서 메소드 오버라이딩은  리턴타입, 메소드 이름, 매개변수가 완전히 동일해야 이루어진다고 배웠었는데.. 하고 검색해보니 자바한정으로 ( 사실 다른언어도 되는진 잘 모르겠는데 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";
    }
}