2016-08-01 4 views
1

궁금한 점은 (반복 질문 인 경우 용서해도되지만 특히 내 질문과 관련하여 정보를 찾을 수 없음) 부모 유형 또는 하위 유형을 반환하는 메소드 정의의 차이점은 무엇입니까? 유형. 다음과 같은 클래스 및 인터페이스 상상부모 유형 또는 하위 유형 반환의 차이점

: 여기 내 특정 시나리오에 지금

public interface Color{ 
    public int getRedVal(); 
    public int getGreenVal(); 
    public int getBlueVal(); 
} 
public class RGBColor implements Color{ 
    public int getRedVal() {...} 
    public int getGreenVal() {...} 
    public int getBlueVal() {...} 
} 
public class HSVColor implements Color{ 
    public int getRedVal() {...} 
    public int getGreenVal() {...} 
    public int getBlueVal() {...} 
} 

을, 나는 차이 사이 일 것입니다 무슨 getRGB()라는 방법을 포함하는 경우 :

public Color getRGB() {return new RGBColor();} 

을 및

public RGBColor getRGB() {return new RGBColor();} 

문서를 찾을 수 없습니다. regar 이것, 그리고 나는 그것이 간단한 대답이라고 확신합니다. 어느 쪽이든, 대답에 미리 감사드립니다.

+0

[인터페이스에 프로그램하는 것이 무엇을 의미합니까?] (http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an- 인터페이스) – bradimus

답변

2
public Color getRGB() { return new RGBColor(); } 

업 캐스팅은 여기에 있습니다 (수퍼 유형으로 캐스트). 당신은 구현에 대해 생각하지 않는보다 추상적 인 수준에서 작업하고 있으며, 부모의 방법만을 사용할 수 있습니다.

public RGBColor getRGB() { return new RGBColor(); } 

당신과 당신의 아키텍처

단단히 구현 ( RGBColor)에 결합되어 있지만,이 서브 클래스에 정의 된 특정 방법을 사용할 수 있습니다.

두 번째 옵션보다는 첫 번째 옵션을 선호합니다.

0

먼저 팩터 리 메서드를 정적으로 설정해야합니다.

둘째, 두 메서드의 차이점은 선언 된 반환 형식입니다. 당신은이 정의의 첫 번째를 사용한 경우, 프로그래머가 작성합니다

Color c = getRGB(); // this is legal 

그들은 쓸 수 없습니다 : 당신이 올바르게 인터페이스로 코딩 한 경우

RGBColor c = getRGB(); // This is illegal 
0

큰 차이가 아니다. 그러나 차이점은 단순히 참조 유형입니다.

한다고 가정 RGBColor

은 추가 공개 방법했다 :

public int[] getRGBFormatVals() //I dunno; I made it up! 

당신은 당신이 반환 유형 Color에서 얻은 인스턴스에이 메소드를 호출 할 수 없을 것입니다,하지만 당신은 반환 형식 RGBColor를 사용한 경우 수 있습니다. 이전 요점을 다시 설명하기 위해 인터페이스에 올바르게 코딩 한 경우에는 발생하지 않을 것입니다.

귀하의 방법이 getRGB이기 때문에, RGBColor을 반환하는 것이 좋습니다. 그 이유는 그러한 이름을 가진 메소드에서 모두 반환해야하기 때문입니다. 동일한 효과를 얻고 그 결과를 볼 수는 있지만 Color 참조에 쉽게 할당 할 수 있습니다.