2013-10-10 4 views
0

'dataItem'이라는 수퍼 클래스에서 메소드 선언을 작성하지 않아서 해당 메소드를 구현하는 모든 서브 클래스가 해당 구현 클래스의 리턴 유형을 가져야합니다. 그게 가능하니?수퍼 클래스의 메소드 선언

예를 들어 'dataItem'을 구현하는 '실험'클래스가 있고 newItem() 메소드가 있습니다. '실험'은 '실험'데이터 유형 만 반환하고 '데이터 항목'의 다른 구현은 반환 할 수 없습니다.

답변

1

클래스 메서드가 멤버 인 형식을 강제로 반환 할 수 없습니다. 실제로 지정해야합니다.

public class DataItem { 
    public DataItem getItem() {return null;} 
} 

public class Experiment extends DataItem { 
    @Override 
    public Experiment getItem() {return null;} 
} 

ExperimentDataItem의 하위 클래스이며, 따라서 DataItem를 사용할 수 있습니다 어디서나 사용할 수 있기 때문에이 작동합니다.

1

난 당신이 찾고있는 가정 :

public interface dataitem<T> 
{ 
    public T newItem(); 
}; 

public class Element implements dataitem<Element> 
{ 
    @Override 
    public Element newItem() 
    { 
     return new Element(); 
    } 
} 
+0

사실, 그것은 가능한 솔루션입니다. 나는 왜 누군가가 그것을 할 것인지 궁금 할뿐입니다. @numfar, 왜 이걸 원하는지 우리에게 설명해 주시겠습니까? – Trein

+0

@Trein 예를 들어 이터레이터에서는 유용하기 때문에 추상 형식 T로 인터페이스를 정의 할 수 있습니다. 그런 다음 모든 하위 클래스는 적절한 함수를 구현해야합니다. –

관련 문제