覆盖抽象Scala类型

时间:2017-04-25 04:23:12

标签: scala

我想要一个方法来覆盖由另一个类扩展的抽象类中定义的类型。

这是一个简单的例子:

abstract class abstr_test{ def word: Int} 

class sub_test(s :String) extends abstr_test{def word: String = s} 

2 个答案:

答案 0 :(得分:2)

您可以使用类型变量来完成此任务。

abstract class Test {
    type A
    def word: A
}

class SubTest(s: String) extends Test {
    type A = String
    def word: String = s
}

答案 1 :(得分:0)

只是为了解释为什么允许你想要的东西(而不是@ soote和答案所提供的)会是一个非常糟糕的主意。

假设您在方法范围内有val x: abstr_test。然后你可以做val y: Int = x.wordx来自哪里并不重要;如果你到达这一行(x不是null,并且word的实现不会引发异常),那么y必须是Int;否则,def word: Int甚至意味着什么?

但如果sub_test扩展abstr_test,则类型sub_test的值也是abstr_test的值;再一次,这只是" subtype"的含义。所以你实际上可以val x: abstr_test = new sub_test("not a number")y之后val y: Int = x.word的价值应该是多少?