gpt4 book ai didi

java - 如何使用泛型并从父类继承而不引起名称冲突?

转载 作者:行者123 更新时间:2023-11-30 02:24:27 25 4
gpt4 key购买 nike

我有一个 Java 父类,名为 Flight 。我有 child 类:JetFlight , NormalFlight等继承自 Flight

我希望所有的 child 类(class)都实现 compareTo来自Comparable界面。我希望他们继承 Flight因为我想使用多态性(例如,启动 Flight 数组并用 JetFlightNormalFlight 等对象填充它)。

这是我的父类代码:

public abstract class Flight  {
public abstract int compareTo(Object o);
}

这是其中一个子类的代码:

public class JetFlight extends Flight implements Comparable<JetFlight> {
private int flightTime;
public JetFlight(int flightTime) {
this.flightTime = flightTime;
}
public int compareTo(JetFlight j) {
return this.flightTime - j.flightTime;
}
}

由于两个错误,此代码无法编译:

1) compareTo(T) in 'java.lang.Comparable' clashes with 'compareTo(Object)' in 'Flight'; both objects have the same erasure, yet neither overrides the other.

2) Class 'JetFlight' must either be declared abstract or implement abstract method 'compareTo(Object)' in 'Flight'

当我想从一个类继承并同时在子类上使用泛型时,我该如何处理?

最佳答案

选项 1:由于您的比较是基于飞行时间,并且据我所知,变量飞行时间可以在父舱中推送,因为所有航类都具有此功能。然后在父类本身中实现compareTo()方法。

选项 2:如果您想保持当前代码不变:

    public abstract class Flight implements Comparable<Flight> {
public abstract int compareTo(Flight o);
}
<小时/>
public class JetFlight extends Flight {
private int flightTime;
public JetFlight(int flightTime) {
this.flightTime = flightTime;
}
public int compareTo(Flight f) {
if(!(f instanceof JetFlight)){
throw new IllegalArgumentException();
}
return this.flightTime - ((JetFlight)f).flightTime;
}

关于java - 如何使用泛型并从父类继承而不引起名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46021716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com