class A { def m1:A = this}
class B extends A {def m2:B = this}
val b = new B
如果b.m2.m1是可以的,但b.m1.m2则不行,因为m1返回的是A类型,
当然可以在B中override def m1,但麻烦,这种情况采用this.type:
class A{def m1:this.type = this}
class B extends A{def m2:this.type=this}
val b = new B
b.m2.m1肯定可以,b.m1.m2分析:
scala中任何类对象都有type属性,它的值其实就是类的实例化对象即this,
b.m1返回的是this.type,所以返回的是B类的对象实例,当然再用这个B类去调用
m2当然是OK的。