scala外部類訪問內部類的私有成員

在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);
}
}
相關文章
相關標籤/搜索