Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子类引用另一个子类,可从同一getter/setter访问_Java_Oop_Inheritance - Fatal编程技术网

Java 子类引用另一个子类,可从同一getter/setter访问

Java 子类引用另一个子类,可从同一getter/setter访问,java,oop,inheritance,Java,Oop,Inheritance,我试图在Java中实现OOP继承设计,其中,如果我看到一个子类OrderTypeA,并调用它的getOrderLines(),它将返回类型为OrderLineTypeA的集合。同样,如果我有一个Order的实例,它的getOrderLines()将返回实例collection 我尝试了以下内容,但似乎无法编译 我正在努力实现的目标: 提议的架构: 命令 公共类秩序{ 受保护列表我认为至少有一个问题在这里: public class OrderTypeA extends Order { prot

我试图在Java中实现OOP继承设计,其中,如果我看到一个子类
OrderTypeA
,并调用它的
getOrderLines()
,它将返回类型为
OrderLineTypeA
的集合。同样,如果我有一个
Order
的实例,它的
getOrderLines()
将返回实例
collection

我尝试了以下内容,但似乎无法编译

我正在努力实现的目标:

提议的架构:

命令

公共类秩序{

受保护列表我认为至少有一个问题在这里:

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扩展了订单{
受保护的列表命令行;
@凌驾
公共列表getOrderLines(){
退货订单行;
}
@凌驾
公共无效集合医嘱行(列出医嘱行){
this.orderLines=(List)orderLines;//不编译
}
}

在OrderTypeA的setOrderLines()中,您尝试将OrderLine类型的列表分配给OrderLineTypeA类型的列表。将子类分配给其父类型无效。

我认为至少有一个问题在这里:

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扩展了订单{
受保护的列表命令行;
@凌驾
公共列表getOrderLines(){
退货订单行;
}
@凌驾
公共无效集合医嘱行(列出医嘱行){
this.orderLines=(List)orderLines;//不编译
}
}

在setOrderLines()中在OrderTypeA中,您尝试将OrderLine类型的列表分配给OrderLineTypeA类型的列表。将子类分配给其父类型无效。

您得到了什么错误?在OrderLineTypeA中的重写中,在setOrder方法中,我得到:
方法不重写OrderTypeA中的父类中的方法,我得到setter方法,表示提供的类型不是必需的类型。在setOrderLines()中在OrderTypeA中,您尝试将OrderLine类型的列表分配给OrderLineTypeA类型的列表。将子类分配给其父类型无效。如果我遗漏了一些内容,请更正我您遇到了什么错误?在OrderLineTypeA中的重写中,在setOrder方法中,我得到:
方法不会从其父类中重写方法,在setter方法中,我发现提供的类型不是必需的类型在OrderTypeA中,您尝试将OrderLine类型的列表分配给OrderLineTypeA类型的列表。将子类分配给其父类型不起作用。如果我遗漏了什么,请纠正我问题是,如何实现这一点?据我所知,OP希望在此类中包含
列表
,而不是
列表
。它必须声明为
setOrderLines(列出医嘱行)
但是从父级重写方法时会出现问题-这些方法将是不同的。转换如何?this.orderLines=(列表)订单行;也在answer@Amongalen
Order
将包含一个
OrderLines
列表,而
OrderTypeA
将包含一个
OrderLineTypeA
列表。更新的问题,我忘记了代码块后的换行符。问题是,如何实现这一点?据我所知,OP希望拥有
list
>在这个类中,不是
List
。它必须声明为
setOrderLines(List orderLines)
,但是从父类重写方法时会出现问题-这些方法将是不同的。转换如何?this.orderLines=(List)订单行;也在answer@Amongalen
Order
将包含一个
OrderLines
列表,而
OrderTypeA
将包含一个
OrderLineTypeA
列表。更新的问题,我忘记了代码块后的换行符。