package com.doit.scala.class13
trait HelloTrait_13_2{
def sayHello(name: String)}
trait MakeFriendsTrait_13_2{
def makeFriends(p: Person_13_2)}classPerson_13_2(val name: String)extendsHelloTrait_13_2 with MakeFriendsTrait_13_2 {
def sayHello(name: String)=println("Hello,"+ name)
def makeFriends(p: Person_13_2)=println("Hello,my name is "+ name +",your name is "+ p.name)}package com.doit.scala.class13
object TestClass13 extends{
def main(args: Array[String]): Unit ={//new接口,类似匿名内部类,但是不能直接new HelloTrait_13_1_1
val p =newHelloTrait_13_2{
override def sayHello(name: String): Unit ={}}
val pw =newPerson_13_2("wang")
val ps =newPerson_13_2("shen")
pw.sayHello("liu")
pw.makeFriends(ps)}}
trait Logger_13_3{
def log(message: String)=println(message)}classPerson_13_3(val name: String)extendsLogger_13_3{
def makeFriends(p: Person_13_3): Unit ={println("Hi,I'm "+ name +",I'm glad to make friends with you,"+ p.name)//log调用继承接口的方法log("makeFriends method is invoked with parameter Person[name = "+ p.name +"]")}}
object TestClass13 extends{
def main(args: Array[String]): Unit ={
val p =newPerson_13_3("wang")
val p1 =newPerson_13_3("liu")
p.makeFriends(p1)}}
trait Person_13_4{
val eyeNum: Int =2}classStudend_13_4(val name: String)extendsPerson_13_4{
def sayHello =println("Hi,I'm "+ name +",I have "+ eyeNum +" eyes.")}
object TestClass13 extends{
def main(args: Array[String]): Unit ={
val s =newStudend_13_4("wang")
s.sayHello
}}
trait SayHello_13_5{
val msg:String
def sayHello(name: String)=println(msg +","+ name)}classPerson_13_5(val name: String)extendsSayHello_13_5{
override val msg: String ="hello"
def makeFriends(p:Person_13_5): Unit ={sayHello(p.name)println("I'm "+ name +",I want to make friends with you!")}}
object TestClass13 extends{
def main(args: Array[String]): Unit ={
val p1 =newPerson_13_5("wang")
p1.sayHello(p1.name)
val p2 =newPerson_13_5("liu")
p2.sayHello(p2.name)}}
trait SayHello_13_10_1{
val msg:String
println(msg.toString)}
trait SayHello_13_10_2{
lazy val msg:String = null
println(msg.toString)}classPerson_13_10_1{}classPerson_13_10_2extends{
val msg :String ="init"} with SayHello_13_10_1
classPerson_13_10_4extendsSayHello_13_10_2{
override lazy val msg: String ="init"}
val p =new{
val msg:String ="init"} with Person_13_10_1 with SayHello_13_10_1
val p =newPerson_13_10_2
val p =newPerson_13_10_4