gpt4 book ai didi

Java:子类实现了接口(interface),父类却覆盖了接口(interface)的成员?

转载 作者:行者123 更新时间:2023-11-29 02:41:03 25 4
gpt4 key购买 nike

一般情况下,一个类实现一个接口(interface),类本身或者它的子类重写接口(interface)中的方法,比如:

定义一个接口(interface):

interface Interface {
void fun();
}

1.父类重写接口(interface)方法,子类直接继承:

public class Parent implements Interface{
public void fun(){
}
}

public class Child extends Parent{
}

或者:

2.父类定义为抽象类,子类重写接口(interface)中的方法:

public abstract class Parent implements Interface{
}

public class Child extends Parent{
public void fun(){
}
}

不过,我也看到了一种奇怪的重写接口(interface)方法的方法:

3.子类只实现接口(interface),父类覆盖接口(interface)中的方法:

public class Parent{
public void fun(){
}
}

public class Child extends Parent implements Interface{
}

第三种重写接口(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()来自于ViewParentViewGroup实现了ViewParent,但是为什么方法的实现要在父类View中完成?

这样设计的原因是什么?

最佳答案

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

但是,View 没有实现 ViewParent,因为并非所有 View 都是其他 View 的父 View 。

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

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

关于Java:子类实现了接口(interface),父类却覆盖了接口(interface)的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com