【发布时间】:2023-03-31 18:33:01
【问题描述】:
我正在尝试在 Java 中实现 OOP 继承设计,如果向我提供OrderTypeA 的子类,并调用它的getOrderLines(),它将返回OrderLineTypeA 类型的集合。同样,如果我有一个Order 的实例,它的getOrderLines() 将返回一个实例Collection<OrderLine> 的集合
我尝试了以下,似乎无法编译。
我想要达到的目标:
订购
public class Order {
protected List<? extends OrderLine> orderLines;
public List<? extends OrderLine> getOrderLines() {
return orderLines;
}
public void setOrderLines(List<OrderLine> orderLines) {
this.orderLines = orderLines;
}
}
订单行
public class OrderLine {
private Order order;
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
订单类型A
public class OrderTypeA extends Order {
protected List<OrderLineTypeA> orderLines;
@Override
public List<OrderLineTypeA> getOrderLines() {
return orderLines;
}
@Override
public void setOrderLines(List<OrderLine> orderLines) {
this.orderLines = orderLines; // does not compile
}
}
OrderLineTypeA
public class OrderLineTypeA extends OrderLine {
private OrderTypeA order;
@Override
public Order getOrder() {
return order;
}
@Override // does not compile, technically not an override
public void setOrder(OrderTypeA order) {
this.order = order;
}
}
我尝试过的其他解决方案包括在子类中省略字段声明,以隐藏父类中的字段。
其他想法包括覆盖子项中的方法,以及将返回语句转换为子项的类型。
谢谢!
【问题讨论】:
-
你遇到了什么错误?
-
在 OrderLineTypeA 的覆盖处,在 setOrder 方法中,我得到:
Method does not override method from its superclass在 OrderTypeA 中,我在 setter 方法中得到,提供的类型不是必需的类型。 -
在 OrderTypeA 的 setOrderLines() 中,您尝试将 OrderLine 类型的列表分配给 OrderLineTypeA 类型的列表。为子类分配其父类型不起作用。如果我错过了什么,请纠正我
标签: java oop inheritance