Scala的内部类和Java的内部/嵌套类之间有什么区别?

时间:2016-09-25 18:34:33

标签: java scala oop

Scala如何以与Java的嵌套,静态或非静态类不同的方式处理内部类?

2 个答案:

答案 0 :(得分:7)

主要区别在于,如果你有

class Outer {
  class Inner {
    def foo(x: Inner): Inner = this // just for the example below
  }
}

Outer的两个实例:

val a = new Outer
val b = new Outer

然后a.Innerb.Inner是两种不同的类型(在Java中,它们都是Outer.Inner),因此您可以&#39 ;做

val aInner = new a.Inner
val bInner = new b.Inner
aInner.foo(bInner)

他们有一个共同的超类型,写成Outer#Inner

答案 1 :(得分:3)

Scala有适当的嵌套类,就像它们最初是在Beta中发明的那样。 Java的内部类不是嵌套类。主要区别在于嵌套类嵌套在封闭的对象中,而不仅仅是封闭的中的内部类。 IOW:嵌套类是封闭类的对象的运行时实例属性,就像同一个类的两个不同实例具有相同名称但不同的值实例变量一样(字段),它们也有相同名称但不同的有价值的嵌套类。

IOW,foo.SomeInnerClassbar.SomeInnerClass是不同的类,而不是类型兼容的。