当前位置: 首页 > 面试题库 >

有没有办法确保接口扩展Java中的类?

濮阳旺
2023-03-14
问题内容

假设我有以下情况:

public abstract class Vehicle {
  public void turnOn() { ... }
}

public interface Flier {
  public void fly();
}

有没有一种方法可以保证实现的任何类也Flier必须扩展Vehicle?我不想创建Flier一个抽象类,因为我希望能够以类似的方式混合其他一些接口。

例如:

// I also want to guarantee any class that implements Car must also implement Vehicle
public interface Car {
  public void honk();
}

// I want the compiler to either give me an error saying
// MySpecialMachine must extend Vehicle, or implicitly make
// it a subclass of Vehicle. Either way, I want it to be
// impossible to implement Car or Flier without also being
// a subclass of Vehicle.
public class MySpecialMachine implements Car, Flier {
  public void honk() { ... }
  public void fly() { ... }
}

问题答案:

Java接口无法扩展类,这很有意义,因为类包含无法在接口内指定的实现细节。

解决此问题的正确方法是通过将接口也完全从实现中分离出来Vehicle。所述Car等可以扩展Vehicle接口以迫使程序员来实现相应的方法。如果要在所有Vehicle实例之间共享代码,则可以将(可能是抽象的)类用作需要实现该接口的任何类的父级。



 类似资料:
  • 问题内容: 首先,我阅读了埃里克森对“为什么不能在Java接口中定义静态方法?”的有用答复。。这个问题不是关于“为什么”的问题,而是关于“然后如何做”的问题。 编辑:我的原始示例不适当地,但我将其保留在下面。 虽然我现在确信在大多数情况下我想做的是过度矫kill过正,但在一种情况下可能需要这样做: 我再举一个例子。现在,让我们采用一个适合于查找表的复杂功能,例如Bessel函数。这必须进行初始化,

  • 我有一个非常简单的练习,我注册客户端名称(字符串),我使用数组来做到这一点,所以当我添加一个新的我将使用另一个辅助数组,然后增加原来的长度,或者我将使用System.array复制,有没有其他方法,逐渐增加数组长度,因为你需要添加元素到该数组,不涉及辅助数组?

  • 问题内容: 我需要确定表示接口的Class对象是否扩展了另一个接口,即: 根据规范 Class.getSuperClass()将为接口返回null。 如果该Class表示Object类,接口,原始类型或void,则返回null。 因此,以下操作将无效。 有任何想法吗? 问题答案: 使用Class.getInterfaces,例如: 另外,以下代码可能会有所帮助,它将为您提供一个包含所有超类和某个类

  • 为什么它这样做,它有一个更好的做法?在sub接口中实现方法有什么区别吗?

  • 在Dart(2.15.0)中,我试图通过定义toJson方法将jsonEncode与枚举一起使用。它不起作用。 根据文档,将查找方法。 当直接在枚举上调用时,扩展可以工作,但是不知何故jsonEncode没有找到toJSON。 Dart如何获取枚举的“值”https://dart.dev/guides/language/extension-methods 知道这是一个错误还是预期的行为吗? 否则,

  • 假设有一个类库X的输入文件,其中包含一些接口。 为了使用这个库,我需要传递一个与。当然,我可以在源文件中创建相同的接口: 但这样一来,我就有了让它和库中的一个保持最新的负担,而且它可能非常大,并导致大量代码重复。 因此,有没有办法“提取”接口的这个特定属性的类型?类似于(这不起作用,导致“找不到名称I2”错误)。 编辑:在TS操场上玩了一会儿后,我注意到以下代码完全实现了我想要的: 但是,它需要声