2014-05-19 3 views
3

동일한 서명이있는 메서드를 재정의 할 수 있음을 알게되었습니다.하위 형식이있는 메서드 재정의

그러나 파생 클래스에서 재정의 된 메서드의 반환 형식은 수퍼 클래스 메서드 반환 형식의 하위 형식이 될 수 있습니다. 위에 제공된 진술이 정확하다면 누구든지이 코드의 문제점을 말해 줄 수 있습니까?

class Base{ 
    public int getValue(){ return 222; } //1 
} 

class Sub extends Base{ 
    public byte getValue(){ return 10; } //2 
    public static void main(String[] args){ 
     Base b = new Sub(); 
     System.out.println(b.getValue()); 
    } 
} 
+1

의 서브 클래스가,있는 방법은 방법의 최우선으로 ** 정확한 ** 같은 서명이 필요하지 않기 때문에,

static class Super { public Date getValue() { return new Date(); } // 1 } static class Sub extends Super { public Timestamp getValue() { return new Timestamp(System.currentTimeMillis()); } // 2 } public static void main(String[] args) { Super b = new Sub(); System.out.println(b.getValue()); } 

는 사용할 수 있습니까? –

+6

바이트는 int의 하위 유형이 아니므로 상속으로 인해 프리미티브와 관련이 없습니다. @Anthony, 방법은 실제로 동일한 서명이 있습니다. – enrique7mc

+0

리턴 유형은 Java에서 메소드 서명의 일부가 아닙니다. –

답변

3
byte

가 기본 유형이 아닌 int의 서브 타입이다. java.sql.Timestamp 재정의하기 위해 java.util.Date