Java:子类实现接口,但父类重写接口的成员?

Java:子类实现接口,但父类重写接口的成员?,java,android,interface,Java,Android,Interface,通常,类实现接口,并且类本身或其子类重写接口中的方法,例如: 定义一个接口: interface Interface { void fun(); } public abstract class Parent implements Interface{ } public class Child extends Parent{ public void fun(){ } } 1.父类重写接口方法,子类直接继承: public class Parent implements

通常,类实现接口,并且类本身或其子类重写接口中的方法,例如:

定义一个接口:

interface Interface {
    void fun();
}
public abstract class Parent implements Interface{
}

public class Child extends Parent{
    public void fun(){
    }
}
1.父类重写接口方法,子类直接继承:

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

public class Child extends Parent{
}
或:

2.父类定义为抽象类,子类重写接口中的方法:

interface Interface {
    void fun();
}
public abstract class Parent implements Interface{
}

public class Child extends Parent{
    public void fun(){
    }
}
但是,我也看到了一种覆盖接口方法的奇怪方式:

3.子类只实现接口,但父类重写接口中的方法:

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

public class Child extends Parent implements Interface{
}
第三种重写接口方法的方法在android框架源代码中非常常见,例如:

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,并且ViewGroup实现ViewParent,但是为什么要在父类View中实现该方法呢


这种设计的原因是什么?

好的,每个
视图都有一个父
视图
,因此基本
视图
类需要一个
getParent()
方法,并且有一个
mParent
属性

但是,
View
并没有实现
ViewParent
,因为并非所有视图都是其他视图的父视图

如果
View
实现了一些基本的“ViewInterface”,则可以在该接口中包含
getParent()
,但由于没有,因此
getParent()
包含在
ViewParent
接口中


既然
View
已经实现了该方法,那么
ViewGroup
子类就不必实现它。

为什么不允许它呢?您的第三点与您给出的示例不匹配。(在Android示例中,父类没有实现接口,这是完全正常的)请更正您的问题。@plup\n问题的核心是:子类实现了一个接口,但超类重写了接口的方法。在本例中,重点是ViewParent、View和ViewGroup之间的关系。这种相对关系与第三种设计模式是一致的。恐怕你的例子在上下文中是错误的!甚至连你所说的相对关系都没有。请参见:
公共类视图扩展对象实现
此处:正如您所看到的视图扩展对象!!!你的答案是围绕着他张贴的例子。真正的问题是,为什么像
Parent implements Interface
Base extends Parent implements Interface
这样的模式是可以接受的?这也可以在标准JavaAPI中找到