通常情况下,一个类会实现一个接口,并且该类本身或其子类会覆盖接口中的方法,例如:
定义一个接口:
interface Interface {
void fun();
}
1. 父类覆盖接口方法,子类直接继承:
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{
}
第三种覆盖接口方法的方式在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 中进行呢?
这样设计的原因是什么?