2017-05-22 4 views
1

일반적으로, 클래스는 인터페이스를 구현하고, 클래스 자체 또는 그 하위 클래스는 같은 인터페이스의 메소드 오버라이드 (override) :Java : 자식 클래스가 인터페이스를 구현하지만 부모 클래스가 인터페이스의 멤버를 재정의합니까?

interface Interface { 
    void fun(); 
} 

1.Parent 클래스는 인터페이스를 오버라이드 (override) :

가 인터페이스를 정의를 방법 및 하위 클래스를 직접 상속 :

public class Parent implements Interface{ 
    public void fun(){ 
    } 
} 

public class Child extends Parent{ 
} 

또는 :

2. 부모 클래스는 다음과 같이 정의된다

public abstract class Parent implements Interface{ 
} 

public class Child extends Parent{ 
    public void fun(){ 
    } 
} 

그러나 나는 또한 인터페이스 메소드 오버라이드 (override)하는 이상한 방법을 참조하십시오 : 추상 클래스와 자식 클래스는 인터페이스의 메소드를 오버라이드 (override)

3. 자식 클래스는 인터페이스를 구현하는,하지만 재정의

,536 :

public class Parent{ 
    public void fun(){ 
    } 
} 

public class Child extends Parent implements Interface{ 
} 

인터페이스 메소드를 재정의하는 세 번째 방법은, 예를 들면, 로이드 워크 소스 코드에서 매우 일반적이다 상위 클래스로 인터페이스 방법

public interface ViewParent { 
    //...... 
    void requestLayout(); 
    ViewParent getParent(); 
} 

public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { 
    //...... 
    @CallSuper 
    public void requestLayout() { 
     //...... 
    } 

    public final ViewParent getParent() { 
     return mParent; 
    } 
} 

public abstract class ViewGroup extends View implements ViewParent, ViewManager { 
    //...... 
} 

방법 requestLayout()의 getParent()ViewParent에서오고, 뷰 그룹이 ViewParent 구현하지만 왜 메소드의 구현이 상위 클래스 보기에서 할 수 있습니까?

이 디자인의 이유는 무엇입니까?

+0

허용해서는 안되는 이유는 무엇입니까? – EJP

+0

귀하의 3 번째 포인트가 귀하가 제시 한 예와 일치하지 않습니다 (부모가 Android 예제에서 Interface를 구현하지 않았으며 완벽하게 정상입니다). 질문을 수정하십시오. –

+0

@pulp_fiction 질문의 핵심은 Subclass는 인터페이스를 구현하지만 Super 클래스는 인터페이스의 메서드를 재정의합니다. 이 예제에서 초점은 ViewParent, View 및 ViewGroup 간의 관계입니다. 이 상대적 관계는 세 번째 디자인 패턴과 일치합니다. – StrayedKing

답변

0

음, 모든 View 부모 View이 있으므로 기본 View 클래스는 getParent() 방법을 필요로하고 mParent 속성이 있습니다.

그러나 모든보기가 다른보기의 부모가 아니기 때문에 ViewViewParent을 구현하지 않습니다.

View 몇 가지 기본적인 "ViewInterface"를 구현하는 경우, 그 인터페이스 getParent()을 포함 할 수있을 것이다, 그러나하지 않기 때문에, getParent()ViewParent 인터페이스에 포함되었다.

View이 이미 해당 방법을 구현하고 있으므로 ViewGroup 하위 클래스는이를 구현할 필요가 없습니다.

+0

귀하의 답변은 그가 게시 한 예와 관련이 있습니다. 진짜 질문은 '부모가 인터페이스를 구현합니다'와 '베이스가 부모가 인터페이스를 구현합니다'와 같은 패턴이 허용되는 이유는 무엇입니까? 이것은 표준 Java API에도 있습니다. –

관련 문제