2017-04-25 105 views
0

我想覆蓋在一個抽象類通過另一個類擴展中定義的類型的方法。覆蓋抽象Scala的類型

這裏是爲了說明的簡單示例:

abstract class abstr_test{ def word: Int} 

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

具有構件'word'與一種類型'Int'的接口,將強制執行的子類的簽名。 Res ipsa loquitur這是不可能的。 – ashawley

+0

性狀試驗[A] {DEF字:A} 類StringTest(S:字串)延伸試驗[字符串] {DEF字:字符串= S} –

+0

感謝所有!非常有幫助 –

回答

2

可以使用一種類型的變量來實現此目的。

abstract class Test { 
    type A 
    def word: A 
} 

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

加1;剛剛提及的是:1)'A'可能只是一個類型參數2)'Test'可以是性狀 – dk14

+2

商定,它可能成爲'性狀abstr_test [A] {DEF字:A}' – ashawley

+0

感謝所有,非常有幫助! –

0

只是爲了解釋爲什麼允許你想要什麼(而不是@ soote的答案提供的)將是一個非常糟糕的主意。

說你的方法的範圍有val x: abstr_test。然後你可以做val y: Int = x.wordx來自哪裏並不重要;如果你到這條線(和xnull,並word實現不拋出異常),則y必須是Int;否則,def word: Int甚至意味着什麼?

但如果sub_test延伸abstr_test,則sub_test類型的值也是abstr_test的值;再次,這只是「子類型」的含義。所以你實際上可以有val x: abstr_test = new sub_test("not a number")val y: Int = x.word之後y的值應該是多少?