/*
视图边界 A <% B
左边的类型是右边类型或者是其子类。
如果不是,
左边类型会隐士转换为右边的类型(前提是隐式转换的方法已经具备)
*/
class Person(var name:String){
def sayHello = println("hello my name is "+name);
def makeFirends(p:Person): Unit ={
sayHello
p.sayHello
}
}
class Student(name:String) extends Person(name)
class Dog(val name:String)
class Party[ T <% Person](p1:Person,p2:Person){
p1.makeFirends(p2)
}
object Test{
implicit def dog2Person(obj:Object):Person={
if(obj.getClass == classOf[Dog]){
val dog = obj.asInstanceOf[Dog]
new Person(dog.name)
}else{
None
}
}
def main(args: Array[String]): Unit = {
val chenxiang = new Student("chenxiang")
val xiaoyu = new Student("xiaoyu")
chenxiang.makeFirends(xiaoyu)
val erlangshen = new Student("erlangshen")
val xiaotianquan = new Dog("xiaotianquan")
val p=new Party[Person](xiaotianquan,erlangshen)
}
}