注意:在同一个包中,即使两个trait分别属于不同的类,其命名不能相同
实例1:(汽车类)
trait Type1 {
def wheele: String = {
"有四个轮子"
}
def run(): Unit
}
trait Type2 {
def fly(): Unit = {
println("可以飞")
}
def downSea(): Unit = {
println("下海")
}
}
abstract class Car {
def brand: String
def engine: String
def didi(): String = {
"汽车鸣笛嘀嘀嘀"
}
}
class BMW extends Car with Type1 with Type2 {
override def band: String = {
"德国宝马"
}
override def engine: String = {
"转子引擎"
}
override def run(): Unit = {
println("在陆地上跑")
}
}
class LingYun extends Car {
override def brand: String = {
"凌云汽车"
}
override def engine: String = {
"纯电动汽车"
}
}
object DemoCar {
def main(args: Array[String]): Unit = {
val bmw = new BMW
println(bmw.brand)
println(bmw.engine)
println(bmw.didi())
println(bmw.wheele)
bmw.run()
val LingYun: LingYun with Type1 with Type2 = new LingYun with Type1 with Type2 {
override def run(): Unit = {
println("两个轮子的电动汽车")
}
}
LingYun.run()
LingYun.fly()
LingYun.downSea()
println(LingYun.brand)
println(LingYun.engine)
}
}
实例2:(动物类)
trait Type11 {
def fly(): Unit = {
println("会飞")
}
}
trait Type22 {
def shut(): Unit = {
println("叫")
}
}
trait Type33 {
def running(): Unit = {
println("跑")
}
}
abstract class Animals {
def lei: String
def sport: String
def voice: String
}
class Dog extends Animals {
override def lei: String = {
"狗:"
}
override def sport: String = {
"奔跑"
}
override def voice: String = {
"汪汪"
}
}
class Rabbit extends Animals {
override def lei: String = {
"兔子:"
}
override def sport: String = {
"蹦蹦跳跳"
}
override def voice: String = {
"小声"
}
}
class Chicken extends Animals {
override def lei: String = {
"鸡:"
}
override def sport: String = {
"扑棱"
}
override def voice: String = {
"咯咯咯"
}
}
object DemoAnimals {
def main(args: Array[String]): Unit = {
val Dog: Dog with Type11 with Type22 with Type33 = new Dog with Type11 with Type22 with Type 33
println(Dog.lei)
Dog.shut()
Dog.running()
val Chicken: Chicken with Type11 with Type22 with Type33 = new Chicken with Type11 with Type22 with Type33
println(Chicken.lei)
println(Chicken.sport)
Chicken.shut()
val Rabbit: Rabbit with Type11 with Type22 with Type33 = new Rabbit with Type11 with Type22 with Type33
println(Rabbit.lei)
println(Rabbit.sport)
}
}