通常,类实现一个接口,和类本身或它的子类中重写在接口中的方法,如:Java:子类实现接口,但父类覆盖接口的成员?
定义的接口:
interface Interface {
void fun();
}
1.Parent类重写接口方法和子类继承直接:
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(){
}
}
不过,我也看到一个奇怪的方法来覆盖接口方法:
3,子类只能实现接口,但覆盖在接口中的方法由父类:
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,并的ViewGroup实现ViewParent,但为什么该方法的实现在父类查看做些什么呢?
这种设计的原因是什么?
它不应该被允许的原因是什么? – EJP
你的第三点与你给出的例子不符(父母没有在Android例子中实现接口,这是完全正常的)修正你的问题。 –
@pulp_fiction问题的核心是:子类实现一个接口,但超类覆盖接口的方法。在这个例子中,重点是ViewParent,View和ViewGroup之间的关系。这种相对关系与第三种设计模式一致。 – StrayedKing