在java中,咱們能夠寫以下代碼: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中是否是也能夠經過外部類訪問內部類的私有成員呢?在交互模式下,輸入以下代碼:this
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的規範相同。scala
一樣的道理,下面的代碼在java中也是能夠正確執行的:code
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); } }