【发布时间】:2016-09-13 13:03:29
【问题描述】:
如果具体类的相同方法具有不同的返回(子)类型,我无法弄清楚如何指定抽象类 A 方法的返回类型:
abstract class A {
def method: List[Common (?)] // I want to force all subclasses to define this method
}
class B1 extends A {
def method(a,b,c): List[Sub1] = {...}
}
class B2 extends A {
def method(a,b,c): List[Sub2] = {...}
}
我试图定义Sub1 和Sub2 的共同特征:
abstract class Common // or abstract class
case class Sub1 extends Common
case class Sub2 extends Common
但我不断得到这个:
Compilation error[class B1 needs to be abstract,
since method "method" in class A of type => List[Common] is not defined]
如果我没有在 A 类中定义返回类型,我会得到与 ... type => Unit ... 相同的错误。
我该如何解决?
【问题讨论】:
-
我在这个问题中没有看到 Java。
-
好的,我删除了标签。我认为这是一个关于继承的抽象问题。
-
不,它是 Scala 的类型系统特有的。
-
@MarkoTopolnik 不,不是。这是一个继承问题。
-
@m-z 这要么是关于一般继承的完全抽象问题,要么是关于一种语言类型系统的特定问题。这绝对不是 Scala 和 Java 特有的问题。
标签: scala