java中的多重继承和方法覆盖问题

gab*_*k00 3 java oop design-patterns

我在另一篇文章中询问了一个类似的问题(如何从不需要强制转换的派生类实现一个方法),但这更具体一些.假设我有3个类:车辆,汽车,敞篷车.汽车延伸车辆,敞篷车延伸汽车.我想为每个类返回一个方法,该方法返回一个不需要在运行时强制转换的列表.经过一番思考后我认为这是不可能的,但我也想听听你的意见

public class Vehicle {
    public List<? extends Vehicle> getList() {
        return new ArrayList<Vehicle>();
    }
}

public class Car extends Vehicle {
    @Override
    public List<? extends Car> getList() {
        return new ArrayList<Car>();
    }
}

public class Convertible extends Car {
    @Override
    public List<? extends Convertible> getList() {
        return new ArrayList<Convertible>();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了不使用强制转换,我必须在list(List<Convertible>)中返回特定类型的元素,但如果我想扩展Convertible类,我就不能再这样做了.

这种情况有什么办法吗?

Pet*_*rey 5

你可以写

public class Vehicle<V extends Vehicle> {
    public List<V> getList() {
        return new ArrayList<V>();
    }
}

public class Car<C extends Car> extends Vehicle<C> {
}

public class Convertible extends Car<Covertible> {
}
Run Code Online (Sandbox Code Playgroud)