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中找到