Java内部类从属于外部类的
scala内部类从属于对象的。若构建了一个外部类,并new出后,外部类对象的内部类是不同的内容
object a {
def main(args: Array[String]): Unit = {
val outer1 = new Outer("spark")
val outer2 = new Outer("scala")
val inner1 = new outer1.Inner("scala") //内部类从属于外部类对象
val inner2 = new outer2.Inner("java")
inner1.foo(inner1) //括号里面换成inner2,会报错,编译通不过
inner2.foo(inner2)
}
}
class Outer(val name : String) { outer => //外部类的this引用
class Inner(val name : String){
def foo(b: Inner){
println(outer.name + " " + b.name)
}
}
}
输出:
spark scala
scala java
Scala这样设计的原因也很好理解。
例如有两个社交网络,每个网络(外部类)应该都有自己的成员(内部类),每个网络内自己的成员应该是不同的内容。
如果想成员共享,类似Java那样,可把内部类的代码放到object里
object a {
class Inner(val name : String){
def foo(b: Inner){
println(outer.name + " " + b.name)
}
}
}
参考资料来源于 DT大数据梦工厂 Scala零基础实战经典第9课 由王家林老师讲解和《快学Scala》