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

标签 java oop design-patterns

我在另一篇文章 ( How to implement a method from a derived class that does not require cast ) 中问过类似的问题,但这个问题更具体一些。 假设我有 3 个类:Vehicle、Car、Convertible。 Car 扩展了 Vehicle,而 Convertible 扩展了 Car。我想要为每个类返回一个不需要在运行时强制转换的列表的方法。想了想觉得不可能,但也想听听大家的意见

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>();
    }
}

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

有什么办法可以解决这种情况吗?

最佳答案

你可以写

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> {
}

关于java - java中的多重继承和方法覆盖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463477/

相关文章:

oop - 配置系统的设计指南?

c++ - 我怎样才能使我的类更加独立于平台?

c# - 存储库模式,UoW模式,普通NHibernate session

java - 在文本 SPARQL 语法和 SPIN RDF 词汇之间进行转换 : How to add rdfs:comment and sp:text

java - Hibernate query.list() 方法返回空列表而不是空值

java - 将类设置为 util 的最佳方法?

asp.net-mvc - ASP.NET MVC : Best practice or design pattern for getting the DTO/EditModel into the Database

java - 静态变量是否位于堆上的永久生成空间上

java - 除了 invalidate() 之外,从 session 中删除用户凭据是多余的吗?

r - 在 R 中,修改类中的值