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")
}
本文深入探讨Scala中的特质(Trait),一种类似Java接口但功能更强大的特性。特质不仅支持方法的声明和实现,还允许多重继承,提供了灵活的代码复用机制。文章通过实例展示了如何定义和使用特质,以及如何在类中混入多个特质。
73

被折叠的 条评论
为什么被折叠?



