-
大多数情况下Scala的特质(trait)相当于Java的接口。
- 方法不需要参数,在def后面指定方法名即可
- 需要参数只需要罗列出来即可
- 一个类需要继承特质时,使用extends和with关键字
- 一个类继承一个特质特质使用extends
- 一个类继承多个特质,第一个特质使用extends,其余特质使用with
- 继承一个类和一个或者多个特质时,对类使用extends,对特质使用with
- 除非实现特质的是抽象类,否则必须实现特质的所有抽象方法。
- 如果类继承了一个特质但是没有实现它的抽象方法,这个类必须被声明为抽象类。
-
可以在特质中声明一个字段,给或者不给初始值,任何继承了这个特质的类都可以使用这些字段
- 给了初始值就是实际字段
- 没有给初始值就是抽象字段
- 继承了这个特质的类中,需要定义“抽象字段”的值,否则,这个类必须被声明为抽象类
- 特质的字段可以生命为var或者val。在一个子类(子特质)中复写特质中的var字段,不需要override关键字,但是复写特质中的val字段时需要使用override关键字
-
可以像Java中的抽象类一样使用特质
- 在特质中定义方法,继承了这个特质的类中可以直接使用这些方法,也可以覆盖这些方法。
- 如果一个类继承了一个特质并且没有实现该特质的抽象方法,那么这个类必须被声明为抽象类。
- 一个类只能继承一个抽象类,但是可以继承多个特质
网友评论