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所代表的类型,这是一个抽象的类型