当前位置: 首页 > 知识库问答 >
问题:

Java:子类实现接口,而父类重写接口的成员?

阚小云
2023-03-14
interface Interface {
    void fun();
}
public class Parent implements Interface{
    public void fun(){
    }
}

public class Child extends Parent{
}
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 {
    //......
}

这样设计的原因是什么?

共有1个答案

宋原
2023-03-14

每个视图都有一个父视图,所以基本view类需要一个getParent()方法和一个mParent属性。

但是,view并不实现viewParent,因为并非所有视图都是其他视图的父视图。

如果view正在实现一些基本的“viewinterface”,那么可以在该接口中包含getparent(),但是由于它没有,所以getparent()被包含在viewparent接口中。

 类似资料:
  • 我有一个类扩展了另一个类(),并实现了一个接口(),如下所示: 接口类和父类都有函数,但我只想重写接口类。目前,这段代码会产生编译错误,因为父类()中的getMessage是。

  • 我试图将MealsRepository接口实现到MealsRepositoryImpl中,但是我得到了以下错误: 无效的重写。'mealsrepositoryimpl.findallforcanteenbydate'('(int,DateTime)->Future Map int,dynamic')的类型不是'mealrepository.findallforcanteenbydate'('(in

  • 问题内容: 我有: 因此,如果我正确理解循环继承的发生,是因为: 编译器转到 A 并说: “嘿,A实现了BListener,让我们去查找BListener!” 然后,当它尝试找到BListener时,最终到达 B ,它说: “嘿,B侦听器,A所需的B侦听器在B内!但是等待!B的侦听器需要A!我们去寻找AListener!” 然后到达A,重复一次。我说对了吗? 顺便说一下,这个编译错误发生在我的An

  • 问题内容: 我继承了一些旧版Java(1.4)代码,并且此设计决策会定期出现。我不知道是否有任何目的或理由。 据我了解接口(并且我的实验得到了加强),使父级和子级实现相同的接口是没有目的的。在这种情况下,from 中的所有内容都在中实现,而in中的方法在中实现。然而,这并不创造需要有落实。 关于接口,有什么我不知道的东西会给这种模式带来一些目的或好处?除了缺乏清晰性之外,还有其他潜在成本会促使其重

  • 问题内容: 前一段时间,我遇到了一段代码,该代码使用了一些标准Java功能来定位实现给定接口的类。我知道这些函数隐藏在某些非逻辑的位置,但是由于包名称暗含,它们可以用于其他类。那时我不需要它,所以我忘记了它,但是现在我需要了,而且似乎无法再次找到这些函数。在哪里可以找到这些功能? 编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。 问题答案: 不久前,我整理了一个

  • 我已经创建了一个接口并编写了实现。在我的主类中,我为接口“interf5”创建了实例,也为实现类“Demo3”创建了实例。 这两个实例'i'有什么区别 请在下面找到我的代码。