package currencies
/**
* Created by jack on 2017/8/4.
*/
abstract class Currency {
type CCurrency <: Currency
val mount:Long
def designation:
String
def +(that:
CCurrency):
CCurrency =
new CCurrency {
this.mount + that.mount
}
def *(factor:Double):
CCurrency =
new CCurrency {
this.mount*factor
}
}
class MyCurrency
extends Currency {
override type CCurrency = MyCurrency
override val mount: Long =
100
override def designation:
String =
"hello"
}
object NewCurrency
extends App{
val a =
new MyCurrency()
val b =
new MyCurrency()
val c =
a+
b
}
上面这段代码看起来没有任何问题,但是在执行“+”或者“*”操作的时候,编译无法通过,究其原因是因为scala不允许实例化一个type所代表的类型的对象,也就是上面
CCurrency所代表的类型,这是一个抽象的类型
转载请注明原文地址: https://www.6miu.com/read-12893.html