在java中,我们可以写如下代码:
public class Outer{
public class Inner{
private int i=5;}
public int getint(){
return new Inner().i;}
}
public class Test{
public static void main (string[] args){
Outer o = new Outer();
System.out.println(o.getint());
}
以上代码可以成功运行,说明java规范中是可以通过外部类访问内部类的私有成员的, 而Scala中是不是也可以通过外部类访问内部类的私有成员呢?在交互模式下,输入如下代码:
class Outer{
class Inner{
private def f(){println("f")}
class InnerMost{
f()
}
}
(new Inner).f()
}
出现如下错误提示: <console>:18: error: method f in class Inner cannot be accessed in Outer.this.Inner (new Inner).f() 说明在scala中,不允许外部类访问内部类的私有成员。 这个实验说明了java和scala在外部类访问内部类的成员方面的不同规范。 而相比之下,在Inner内部类中还有一个内部类InnerMost,在InnerMost中可以访问它的外部类Inner, 也就是说,scala内部类可以访问外部类的所有成员。这点和java的规范相同。
同样的道理,下面的代码在java中也是可以正确执行的:
class Outer{
class Inner{
private int i=12;
}
public static void main(string[] args){
Outer.Inner inner = new Outer.Inner();
System.out.println(inner.i);
}
}