1.30
new内嵌类实例语法形式为new <外部类实例>.<内嵌类名>
,而java中为<外部类实例>.new <内嵌类名>。
class P{
class PNested
}
object P {
class PInner
}
object app extends App {
val p=new P
val p2=new P
val list1:ListBuffer[p.PNested] = ListBuffer()
list1 += new p.PNested // OK
// list1 += new p2.PNested // compilation ERROR
val list2:ListBuffer[P#PNested] = ListBuffer()
list2 += new p.PNested // OK
list2 += new p2.PNested // OK
println(new p.PNested().getClass eq new p2.PNested().getClass) // but this gets true
val z = new P.PInner
}
class Outer{
class Inner{
def conn(n:Inner){}
}
def newInn:Inner=new Inner
}
val outer1=new Outer; val o1n1=new outer1.Inner;val o1n2=outer1.newInn;
val outer2=new Outer; val o2n1=outer2.newInn
o1n1.conn(o1n2); // OK,o1n1, o1n2类型均为o1.Inner
//! o1n2.conn(o2n1); // ERROR o1n1类型为o1.Inner,其conn方法期待的类型是o1.Inner,而o2n1类型为o2.Inner
class ... {
class Inner {
def conn(n: Outer#Inner){}
}
}
class中可定义内嵌class或object,object的归属性质同class。
TODO 内嵌类访问外部类引用