1、特质trait与抽象类abstract的区别
1、抽象类不能多继承,只能单继承;特质可以多继承
2、抽象类有带参数的构造函数; 特质没有带有参数的构造函数(比如: trait t(i:Int){} ,这种声明是错误的 )
3、都有抽象方法和已经实现的方法,子类重载其非抽象成员都必须加上override关键字,子类重载其抽象成员时override关键字可选;
2、注意事项:
1、scala中一个类可以继承多个特质 中间用with相连;trailt中的定义的方法,可以有实现,也可以没有实现;
2、优先使用特质,一个类扩展多个特质是很方便的,但却只能扩展一个抽象类;
3、如果需要构造方法参数,使用抽象类,因为抽象类可以定义带参数的构造方法,而特质不行;
3、什么时候应该使用特质而不是抽象类
如果你想定义一个类似接口的类型,你可能会在特质和抽象类之间难以取舍。这两种形式都可以让你定义一个类型的一些行为,并要求继承者定义一些其他行为。
- 优先使用特质,一个类扩展多个特质是很方便的,但却只能扩展一个抽象类
- 如果需要构造方法参数,使用抽象类,因为抽象类可以定义带参数的构造方法,而特质不行;