有没有办法保证接口在Java中扩展类?

2022-09-01 08:48:32

假设我有以下情况:

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

public interface Flier {
  public void fly();
}

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

例如:

// 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() { ... }
}

答案 1

Java 接口不能扩展类,这是有道理的,因为类包含无法在接口中指定的实现细节。

处理这个问题的正确方法是通过变成接口来完全将接口与实现分开。e.t.c.可以扩展接口,迫使程序员实现相应的方法。如果要在所有实例之间共享代码,则可以使用(可能是抽象)类作为需要实现该接口的任何类的父级。VehicleCarVehicleVehicle


答案 2

您可以像这样重新排列类和接口:

public interface IVehicle {
  public void turnOn();
}

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

public interface Flier extends IVehicle {
  public void fly();
}

这样,所有实现都保证实现车辆的协议,即。FlierIVehicle


推荐