我试图在Java中实现一个OOP继承设计,如果我得到一个子类,即 OrderTypeA
,并称其为 getOrderLines()
的集合,它将返回一个类型为 OrderLineTypeA
. 同样地,如果我有一个关于 Order
,其 getOrderLines()
将返回一个实例的集合 Collection<OrderLine>
我尝试了以下方法,但似乎无法编译。
我想达到的目的是什么?
Order
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
}
}
订单行类型A
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;
}
}
我试过的其他解决方案包括在子类中省略字段声明,以隐藏父类中的字段。
其他的想法包括在子类中覆盖方法,并将返回语句转换为子类的类型。
谢谢!我正在尝试实现一个OOP的方法,以隐藏父类中的字段。
我想至少有一个问题在这里。
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 = (List<OrderLineTypeA>)orderLines; // does not compile
}
}
在OrderTypeA的setOrderLines()中,你试图将一个OrderLine类型的列表分配给一个OrderLineTypeA类型的列表。赋值一个子类它的父类是行不通的。