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

来源:互联网 发布:水浒卡片全套 淘宝 编辑:程序博客网 时间:2024/06/05 07:46

参考 Effective Scala 对特质的观点.
什么时候应该使用特质而不是抽象类? 如果你想定义一个类似接口的类型, 你可能会在特质和抽象类之间难以取舍. 这两种形式都可以让你定义一个类型的一些行为, 并要求继承者定义一些其他行为. 一些经验法则:

优先使用特质. 一个类扩展多个特质是很方便的, 但却只能扩展一个抽象类.
如果你需要构造函数参数, 使用抽象类. 因为抽象类可以定义带参数的构造函数, 而特质不行. 例如, 你不能说trait t(i: Int) {}, 参数i是非法的.
你不是问这个问题的第一人. 可以查看更全面的答案: stackoverflow: Scala特质 vs 抽象类 , 抽象类和特质的区别, and Scala编程: 用特质, 还是不用特质?

以上内容援引自 Scala 课堂!

个人理解,主要原因是由于Scala支持继承多个trait,所以可以更灵活.

原创粉丝点击