抽象类型type的使用

来源:互联网 发布:网络诈骗转账图片大全 编辑:程序博客网 时间:2024/06/05 15:32
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所代表的类型,这是一个抽象的类型
原创粉丝点击