Scala如何以与Java的嵌套,静态或非静态类不同的方式处理内部类?
答案 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.Inner
和b.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.SomeInnerClass
和bar.SomeInnerClass
是不同的类,而不是类型兼容的。