9.Scala的内部类实战详解

来源:互联网 发布:gson将对象转换成json 编辑:程序博客网 时间:2024/05/16 13:42

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》