gpt4 book ai didi

java - 实现一个接口(interface)而不实现它

转载 作者:行者123 更新时间:2023-11-30 06:17:36 26 4
gpt4 key购买 nike

可以在不实现接口(interface)的情况下实现接口(interface)——如:

interface A { void m2(); }

class B { public void m2() { ... } }

class C extends B implements A { ... /* no implementation of m2() here */ }

我想知道的是,有没有办法强制子类,类 C在这里,实现方法m2()

这看起来有点偏题——打破了预期的继承链。

在某些情况下,我现在无法想到有必要以这种方式强制子类。

TIA。

//==========================

编辑:一种情况:

有一类B和一个接口(interface) A使用方法在应用程序的两个不同位置开发 m2()两者具有相同的签名。

B正在实现 m2()以自己的方式——甚至不知道是什么A是关于。

C上面很快进入,它有一个m2()这与A中的契约(Contract)无关.

这需要对开发进行糟糕的管理。但是,仍然。

//=================================

编辑-2:

限制 m2()-of-B 对包级别或 protected 的访问作品。这样,m2()BC正在继承不会为 A 做因为它不是 public .

这是对类本身应该做的事情的一些缓和——但事实并非如此。一个 super 类应该能够指挥一个子类。大致类似于 final 的使用在方法或类本身上。注意 AndyThomas 的有用答案。尽管。

最佳答案

如所写,C 类必须同时满足 B.m2()A.m2() 的约定。

这些契约(Contract)要么兼容,要么不兼容。

如果这些契约兼容,那么 B.m2() 要么是 C 的充分实现,要么不是。

  • 如果足够,则不需要覆盖。
  • 如果它足够,那么 C 类有责任覆盖它。
    • 在 C 类中,您可以通过……简单地覆盖方法来强制覆盖。
    • 在 C 类之外,您不能强制 C 覆盖现有的非抽象父类(super class)方法。

如果这些契约兼容,那么 C 不能既扩展 B 又实现 A。在这种情况下,您可以使用组合而不是继承——让 C 实现A,并在其表示中包含一个 B。

Java 中没有机制强制所有实现接口(interface)的可实例化类覆盖接口(interface)中方法的父类(super class)实现。但是,您可以强制所有可实例化的类在其继承层次结构中的某处实现一个抽象方法。

关于java - 实现一个接口(interface)而不实现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732510/

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