scala中protected的訪問權限

在java中同一個包中,其它類能夠訪問本類中的protected成員,其它包中本類的子類能夠訪問本類的protected成員,但其它類則不能訪問本類的protected成員。那麼scala中是否是也是這樣的權限呢? 咱們作個實驗:java

joe@joe-Aspire-Z3730:/media/sdb4/download/scala/testdemo/protecteddemo$ gedit protectedtest.scala

package p{
class Super{
	protected def f(){println(s"protected \n test")}
}
class Sub extends Super{
f()
}

class Other{
(new Super()).f()
}
}

而後編譯代碼,出現以下提示:scala

joe@joe-Aspire-Z3730:/media/sdb4/download/scala/testdemo/protecteddemo$ scalac protectedtest.scala 
protectedtest.scala:10: error: method f in class Super cannot be accessed in p.Super
 Access to protected method f not permitted because
 enclosing class Other in package p is not a subclass of
 class Super in package p where target is defined
(new Super()).f()
              ^
one error found

咱們將(new Super()).f()這行代碼換成能夠正常執行的語句,如:println("other .....")再進行編譯則成功。 這個實驗說明在scala中,同一個包中,不是子類的話,則不能訪問另外一個類中的protected成員,那麼能夠推出,不是同一個包中的類,更不可能訪問本包中的某個類的protected成員。code

相關文章
相關標籤/搜索