Java:子类实现接口,但父类覆盖接口的成员?

时间:2017-05-22 09:35:59

标签: java android interface

通常,类实现接口,类本身或其子类覆盖接口中的方法,例如:

定义界面:

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 ,但为什么在父类查看中完成方法的实现?

这种设计的原因是什么?

1 个答案:

答案 0 :(得分:0)

好吧,每个View都有一个父View,因此基础View类需要一个getParent()方法并且具有mParent属性。

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

如果View正在实施一些基本的“ViewInterface”,则可以在该界面中包含getParent(),但由于它没有,getParent()包含在ViewParent中1}} interface。

由于View已经实现了该方法,ViewGroup子类不必实现它。