object App { implicit def toM2(m1:M1): M2 ={ println("m1 to m2") new M2() } class M1 { def method1(): Unit ={ println("invoke method 1") } } class M2() { def method2(): Unit ={ println("invoke method 2") } } def main(args: Array[String]) { val m1 = new M1 //m1本身有method1的方法,一次不需要调用隐式转换 //输出 println("invoke method 1") m1.method1() //m1不存在method2 方法,需要在作用域中寻找隐式转换,正好发现有一个能把m1转换成m2,恰好m2有method方法,那么先执行转换方法,再执行method2 //输出 println("m1 to m2") println("invoke method 2") m1.method2() //m1本身有method1的方法,一次不需要调用隐式转换 //输出 println("invoke method 1") m1.method1() //m1不存在method2 方法,需要在作用域中寻找隐式转换,正好发现有一个能把m1转换成m2,恰好m2有method2方法,那么先执行转换方法,再执行method2 //输出 println("m1 to m2") println("invoke method 2") //需要注意的是,这次又执行了转换方法,这意味着每次执行的独立性. m1.method2() } }