对不起,标题,还没说清楚。
我有以下结构:

public interface Vehicle {...}
public class Car implements Vehicle {...}


然后:

public abstract class Fixer {
...
   abstract void fix(Vehicle vehicle);
...
}


并希望拥有:

public class CarFixer extends Fixer {
    void fix(Car car) {...}
}


但这不起作用。 Eclipse说:The type CarFixer must implement the inherited abstract method Fixer.fix(Vehicle)。知道我该如何解决吗?

最佳答案

您可以使用泛型来解决此问题:

public abstract class Fixer<T extends Vehicle> {
    abstract void fix(T vehicle);
}

public class CarFixer extends Fixer<Car> {
    void fix(Car car) {...}
}


原始版本的问题在于fix方法允许任何类型的车辆,但是您的实现类仅允许车辆。考虑以下代码:

Fixer fixer = new CarFixer();
fixer.fix(new Bike()); // <-- boom, `ClassCastException`, Bike is a vehicle but not a car

关于java - Java继承;将子类传递给父类(super class)的抽象方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23917156/

10-10 19:42