我有Results
的课程extends ArrayList<Results>
。我有一个对象i
,其函数i.getResults()
返回ArrayList
类型ArrayList<Results>
。我正在尝试以下方法:
Results result = i.getResults();
但是,我遇到类型不匹配错误。为什么我不能做这个任务?如何将其分配到结果类型?
编辑:要解释我想要实现的目标..我无法访问ArrayList<Results>
代码,我想让它实现某个类我Results
正在实施
答案 0 :(得分:3)
您不能 - ArrayList<Results>
不是Results
。 Results
是ArrayList<Results>
,但您可以指定其他方式。
答案 1 :(得分:1)
您正在为子类分配父级。这是不可能的。你可以指定做
ArrayList<Result> list = new Results();
答案 2 :(得分:1)
你的关系是错误的。
class T {}
class S extends T {}
LSP表示:
在计算机程序中如果S是T的子类型,则类型T的对象可以用类型S的对象替换(即,类型S的对象可以替代类型为T的对象),而不改变任何类型的对象。该程序的理想属性(正确性,执行任务等)
换句话说,任何需要T
的地方都可以获得S
毫无问题。想要S
的内容无法获得T
,因为它不够具体。
在您的示例中,i.getResults()
会返回ArrayList<Results>
。您无法将其分配给Results
,因为Results
比数组列表更具体。
答案 3 :(得分:0)
你有
Results extends ArrayList<Results>
因此,您可以使用ArrayList的任何地方,您可以使用结果,但反之亦然。当你说 延伸你说我可以做他能做的一切,而且还可以做更多。
C extends D
说:如果您需要的只是一个D,那么您可以使用C或D.但是需要C的人不能接受D,因为它没有C提供的所有功能。
答案 4 :(得分:0)
好吧,您正在尝试将超类类型的对象分配给子类类型的引用,当然这是编译时错误,因为它可能无效。这与您尝试将返回Object
的方法的返回值分配给类型为String
的变量的情况相同。如果您完全确定getResults()
方法返回Results
对象,则应更改其返回类型。或者,如果您在此上下文中只确定它,则可以使用强制转换。