特质(interface):
快捷键:control+I Control + O
control + I 特质中有方法未实现,快捷键可以在继承该特质的对象或class(类)中实现该方法
control + O 在对象中或者类中实现特质的方法重写
package day03
/**
* 特质(interface)
* 在Scala中特质中可以定义有实现的方法,也可以定义没有实现的方法
*
*/
trait ScalaTrait {
//没有任何实现的方法
def hello(name: String)
def smile(name: String) = {
prinln(s"老赵对$name 妩媚一笑")
}
}
特质中还可以定义一个变量,且变量可以不用赋值,但在继承它的对象或类中,要重写。
package day03
object ScalaTraitImpl extends ScalaTrait{
/**
*如果特质中hello方法没有实现的话,子类在实现的时候可以不加
* override,也可以不加
*/
override def hello(name: String): Unit = {
println(s"hello $name")
}
/**
*如果特质中某个方法有具体的实现,在子类继承重写的时候
* 必须使用override关键字
*/
override def smile(name: String): Any = {
println(s"丁丁对 $name 哈哈一笑")
}
def main(args: Array[String]): Unit = {
ScalaTraitImpl.hello("hanmeimei")
ScalaTraitImpl.smile("老段")
}
}
Trait这个还有一个强大的功能:动态的混入
你可以在定义的时候就混入特质,还可以在创建类的实例时直接混入之歌特质
package day03
/**
* 特质(interface)
* 在Scala中特质中可以定义有实现的方法,也可以定义没有实现的方法
*
*/
trait ScalaTrait {
//没有任何实现的方法
def hello(name: String) = {
println(name)
}
def smile(name: String) = {
println(s"老赵对$name 妩媚一笑")
}
}
package day03
trait Fly {
def fly(name: String) ={
println(s"看,${name} 在飞...")
}
}
package day03
object ScalaTraitImpl extends ScalaTrait with Fly{
/**
*如果特质中hello方法没有实现的话,子类在实现的时候可以不加
* override,也可以不加
*/
override def hello(name: String): Unit = {
println(s"hello $name")
}
/**
*如果特质中某个方法有具体的实现,在子类继承重写的时候
* 必须使用override关键字
*/
override def smile(name: String): Unit = {
println(s"丁丁对 $name 哈哈一笑")
}
def main(args: Array[String]): Unit = {
ScalaTraitImpl.hello("hanmeimei")
ScalaTraitImpl.smile("老段")
ScalaTraitImpl.fly("taotao222")
}
}
package day03
class Student {
}
object Person {
def main(args: Array[String]): Unit = {
/**
* 在scala 中可以动态的混入N个特质
*/
val student = new Student with ScalaTrait with Fly
student.hello("老羊")
student.fly("taotao")
}
}