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

Rau*_*aul 4 java oop scala

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

Ale*_*nov 8

主要的区别在于,如果你有

class Outer {
  class Inner {
    def foo(x: Inner): Inner = this // just for the example below
  }
}
Run Code Online (Sandbox Code Playgroud)

和两个实例Outer:

val a = new Outer
val b = new Outer
Run Code Online (Sandbox Code Playgroud)

然后a.Innerb.Inner两种不同类型(如Java中,他们俩都可以Outer.Inner),让你不能做

val aInner = new a.Inner
val bInner = new b.Inner
aInner.foo(bInner)
Run Code Online (Sandbox Code Playgroud)

他们确实有一个共同的超类型,这是写的Outer#Inner.


Jör*_*tag 6

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

IOW,foo.SomeInnerClass并且bar.SomeInnerClass是不同的类并且类型不兼容。