일반적으로, 클래스는 인터페이스를 구현하고, 클래스 자체 또는 그 하위 클래스는 같은 인터페이스의 메소드 오버라이드 (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 구현하지만 왜 메소드의 구현이 상위 클래스 보기에서 할 수 있습니까?
이 디자인의 이유는 무엇입니까?
허용해서는 안되는 이유는 무엇입니까? – EJP
귀하의 3 번째 포인트가 귀하가 제시 한 예와 일치하지 않습니다 (부모가 Android 예제에서 Interface를 구현하지 않았으며 완벽하게 정상입니다). 질문을 수정하십시오. –
@pulp_fiction 질문의 핵심은 Subclass는 인터페이스를 구현하지만 Super 클래스는 인터페이스의 메서드를 재정의합니다. 이 예제에서 초점은 ViewParent, View 및 ViewGroup 간의 관계입니다. 이 상대적 관계는 세 번째 디자인 패턴과 일치합니다. – StrayedKing