Scala的特质
Scala 的特质定义:
traitidentified{
}
Scala特质作用:
trait Person{
val name="scala"
def a():Unit
}
Scala的trait的用法
1.只有抽象方法的trait
2.只有抽象成员和方法的trait
3.具体成员的变量和方法
4.对象继承特质
trait Person{
valname:String
def run():Unit
def speak():Unit
defjump()={实现}
}
import java.rmi.server.UID
//trait:特质(美丽 ,智慧,耐心。。。)
//作用:(1)当作接口来使用,实现多继承;(2)当作抽象类,定义类的标准
//格式:trait 名字{属性,方法}
trait BackgroundPlayer {
//abstract class BackgroundPlayer(){
//抽象属性
val cd:String
//抽象方法
def play
def color="red"//具体属性
def pause():Unit={//具体方法
}
}
//播放视频
trait VidepPlayer{
def playVideo
}
abstract class Screen{
def showScreen
}
//子类继承特质,必须要实现所有的抽象的成员
class Mp3 extends BackgroundPlayer {
val cd = "周杰伦"
def play(): Unit = {
println(s"Mp3 播放 ${cd}")
}
}
//一个子类有多个父类-多继承
//一个子类继承一个抽象类,并实现多个特质
class Mp4 extends Screen with BackgroundPlayer with VidepPlayer {
val cd = "王杰"
def play(): Unit = {
println("mp3 播放器")
}
def playVideo(): Unit = {
println("Mp4 播放器-视频")
}
def showScreen():Unit={
println("ShowScreen")
}
}
object test1 {
def main(args: Array[String]): Unit = {
//trait 不能直接new
// new BackgroundPlayer {
val m1 = new Mp4()
m1.play()
}
}
//定义一个特质
//特质可以有抽象属性,具体属性,抽象方法,具体方法
trait Beauty{
//抽象属性(没有=)
val hair:String
//具体属性
var age=18
val height=180//val不可以修改,var可以修改
//抽象方法(没有)
def smile
//具体方法
def say():Unit={}
}
class Boy extends Beauty{
//抽象属性 要具体实现
val hair="短发"
//具体属性可以重写(可选)
//var修饰的,可以直接赋值
//val修饰的,可以用override重写
override val height=178
age=20
//抽象方法 要具体实现
def smile():Unit={
println(s"嘴角微微扬起")_
}
//具体方法可以重写(可选)
override def say(): Unit = {
println(s"${age}岁,${height}大高个,${hair}")
}
}
object test2 {
def main(args: Array[String]): Unit = {
val b1=new Boy()
// println(b1.age,b1.height)
b1.say()
}
}