子类引用另一个子类,可从同一个gettersetter中访问

问题描述 投票:1回答:1

我试图在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的方法,以隐藏父类中的字段。

java oop inheritance
1个回答
0
投票

我想至少有一个问题在这里。

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类型的列表。赋值一个子类它的父类是行不通的。

© www.soinside.com 2019 - 2024. All rights reserved.