Scala中特质trait与抽象类abstract的区别

转载 2016年05月30日 21:19:51

来源:https://twitter.github.io/scala_school/zh_cn/basics.html

什么时候应该使用特质而不是抽象类? 

如果你想定义一个类似接口的类型,你可能会在特质和抽象类之间难以取舍。这两种形式都可以让你定义一个类型的一些行为,并要求继承者定义一些其他行为。一些经验法则:

  • 优先使用特质。一个类扩展多个特质是很方便的,但却只能扩展一个抽象类。
  • 如果你需要构造函数参数,使用抽象类。因为抽象类可以定义带参数的构造函数,而特质不行。例如,你不能说trait t(i: Int) {},参数i是非法的。

你不是问这个问题的第一人。可以查看更全面的答案: stackoverflow: Scala特质 vs 抽象类 , 抽象类和特质的区别, and Scala编程: 用特质,还是不用特质?

Scala Q&A : 特质trait和抽象类abstract class的区别?

参考 Effective Scala 对特质的观点. 什么时候应该使用特质而不是抽象类? 如果你想定义一个类似接口的类型, 你可能会在特质和抽象类之间难以取舍. 这两种形式都可以让你定义一个类...

Scala:trait

Scala中对trait的处理
  • bdmh
  • bdmh
  • 2015年12月14日 14:00
  • 1776

scala的继承、组合与特质trait

scala可以在子类的构造器中重写父类的属性,例如: abstract class Element { def contents:Array[ String] val height:Int = con...

scala入门-06抽象类(abstract)的使用

scala入门-06抽象类(abstract)的使用 scala入门-06抽象类(abstract)的使用

scala学习之路:10. Abstract抽象类抽象字段抽象方法

/** * 抽象类抽象字段抽象方法 必须用abstract修饰 */ class AbstractClassOps { var id : Int = _ // 此处 变量必须初始化...

Scala坑六(抽象类)

1.抽象类(abstract class) 类的一个或者多个方法没有完整的定义 声明方法时只需要不写方法体,不需要关键字 子类重写父类的抽象方法时不需要加override 父类可以声明抽象字段...
  • hhl2046
  • hhl2046
  • 2015年11月23日 21:33
  • 701

Scala学习笔记(七) - 继承

Scala中的继承与Java,C#的继承基本一样,感觉上更接近于C# 抽象类: Scala中的抽象类依然使用abstract关键字,例如: abstract class XXX  Scala中...
  • expt
  • expt
  • 2012年08月03日 10:36
  • 3992

Scala 抽象类

Scala抽象类不能被实例化,包含若干定义不完全的方法,具体的实现由子类去实现。...
  • yyywyr
  • yyywyr
  • 2015年12月07日 21:39
  • 1656

Scala学习第十三天 抽象类、抽象字段、抽象方法

内容: 1 抽象类代码实战 2 抽象字段代码实战 3 抽象方法代码实战class AbstractClass{ //在普通类中 字段必须赋值(有两种方式1.赋具体的值 2."_"占位...

scala的抽象类、抽象字段、抽象方法

1.抽象类是声明用abstract 2.方法是抽象方法 在抽象类中只需要定义方法,没有实现 3.字段是抽象方法 在抽象类中不给字段进行赋值 4.代码 package...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scala中特质trait与抽象类abstract的区别
举报原因:
原因补充:

(最多只允许输入30个字)