通常,类实现接口,类本身或其子类覆盖接口中的方法,例如:
定义界面:
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{
}
覆盖接口方法的第三种方法在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 ,但为什么在父类查看中完成方法的实现?
这种设计的原因是什么?
答案 0 :(得分:0)
好吧,每个View
都有一个父View
,因此基础View
类需要一个getParent()
方法并且具有mParent
属性。
但是,View
未实现ViewParent
,因为并非所有视图都是其他视图的父级。
如果View
正在实施一些基本的“ViewInterface”,则可以在该界面中包含getParent()
,但由于它没有,getParent()
包含在ViewParent
中1}} interface。
由于View
已经实现了该方法,ViewGroup
子类不必实现它。