Implicit

SpecialPerson(name: )

Student(name: )

Older(name: )

Teacher(name: )

Implicit01 {
  = buySpecialTicket(p: SpecialPerson) = {
    += + }

  object2SpecialPerson(obj: Object): SpecialPerson = {
    (obj.getClass == [Student]) {
      stu = obj.asInstanceOf[Student]
      SpecialPerson(stu.name)
    } (obj.getClass == [Older]) {
      older = obj.asInstanceOf[Older]
      SpecialPerson(older.name)
    } {
      Exception()
    }
  }

  main(args: Array[]): Unit = {
    s = Student()
    ((s))
    o = Older()
    ((o))
    t = Teacher()
    ((t))

  }
}

2:类型没有的方法会进行隐式转换
Implicit

Man(name: )

Superman(name: ) {
  emitLaser = ()
}

Implicti02 {

  man2superman(m: Man): Superman = {
    Superman(m.name)
  }

  main(args: Array[]): Unit = {
    man = Man()
    man.emitLaser
  }
}

3:类型方法有但是参数不一致
Implicit

TicketHouse {
  = buySpecialTicker(p: ) = {
    += + }
}

Implicit03 {
  object2SpecialPerson(obj: Object):  = {
    (obj.getClass == [Student]) {
      stu = obj.asInstanceOf[Student]
      (stu.name)
    } (obj.getClass == [Older]) {
      older = obj.asInstanceOf[Older]
      (older.name)
    } {
      Exception()
    }
  }

  main(args: Array[]): Unit = {
    ticketHouse = TicketHouse
    s = Student()
    (ticketHouse.buySpecialTicker(s))
    o = Older()
    (ticketHouse.buySpecialTicker(o))
    t = Teacher()
    (ticketHouse.buySpecialTicker(t))

  }
}

4:隐式参数
Implicit

SignPen {
  write(content: ) = (content)
}

ImplicitContext {
  = SignPen
}

Implicit04 {
  signForExam(name: )(signPen: SignPen): Unit = {
    signPen.write(name + )
  }

  main(args: Array[]): Unit = {
    ImplicitContext._
    ()
    ()
  }
}