Scala Trait(特质) 相当于 Java 的接口,实际上它比接口还功能强大。
与接口不同的是,它还可以定义属性和方法的实现。
一般情况下 Scala 的类只能够继承单一父类,但是如果是 Trait(特质) 的话就可以继承多个,
实现了多重继承。使用的关键字是 trait .
package day03 /** * 特质(相当于java中的interface) * * 既可以定义没有实现的方法,也可以定义有实现的方法 */ trait ScalaTrait { /** * 没有实现的方法 * @param name */ def hell(name: String) /** * 有实现的方法 * @param name */ def small(name: String): Unit = { println(s".....small to $name") } }
package day03 object ScalaTraitImpl extends ScalaTrait { override def hell(name: String): Unit = { println(s"hello$name") } /** * 重写有实现的方法 * * @param name */ override def small(name: String): Unit = { println(s"small to $name") } def main(args: Array[String]): Unit = { ScalaTraitImpl.hell("lucas") ScalaTraitImpl.small("lucas") } }
动态混入特质。
package day03 trait Fly { def fly(name: String): Unit = { println(s"$name 在飞") } }
package day03 trait Run { def run(name: String): Unit = { println(s"$name 在跑") } }
特质的使用方式第一种:
package day03 object ScalaTraitImpl extends ScalaTrait { override def hell(name: String): Unit = { println(s"hello$name") } /** * 重写有实现的方法 * * @param name */ override def small(name: String): Unit = { println(s"small to $name") } def main(args: Array[String]): Unit = { ScalaTraitImpl.hell("lucas") ScalaTraitImpl.small("lucas") //scala可以动态混入多个特质 val student = new Student with Fly with Run student.fly("lucas") student.run("lucas") } }
也可以:
package day03 object ScalaTraitImpl extends ScalaTrait with Fly { override def hell(name: String): Unit = { println(s"hello$name") }