java - 有没有办法保证接口(interface)扩展 Java 中的类?

标签 java inheritance interface

假设我有以下情况:

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

public interface Flier {
  public void fly();
}

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

例如:

// 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 接口(interface)不能扩展类,这是有道理的,因为类包含无法在接口(interface)中指定的实现细节..

解决这个问题的正确方法是把Vehicle也变成一个接口(interface),把接口(interface)和实现完全分开。 Car 等。可以扩展Vehicle接口(interface),强制程序员实现相应的方法。如果您想在所有 Vehicle 实例之间共享代码,则可以使用(可能是抽象的)类作为任何需要实现该接口(interface)的类的父类。

关于java - 有没有办法保证接口(interface)扩展 Java 中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14109173/

相关文章:

java - 显示数学游戏的难度

java - 在表中显示从数据库中检索到的值

java - 继承不允许我创建子类的对象?

java - 实现不完整接口(interface)的抽象类

ios - XCode Storyboard本地化重复字符串合并?

java - Service 如何与其 Activity 通信?服务如何调用启动该服务的 Activity 中的方法?

java - 如何从 Connection 对象确定 DBMS

c++ - 不明白这个返回类型?

c++ - 需要关于多重继承和可选函数覆盖 C++ 的建议

c# - 在客户端项目中实现库方法