2009-10-31 116 views
1

ArrayBuffer擴展了ResizableArray,其中包含一個受保護的方法swap。但我無法訪問交換。我錯過了什麼?無法從子類ArrayBuffer訪問ResizableArray的受保護方法swap?

scala> import scala.collection.mutable.ArrayBuffer 
import scala.collection.mutable.ArrayBuffer 

scala> val x=new ArrayBuffer[Int]() 
x: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer() 

scala> x+=3 

scala> x+=5 

scala> x.swap(0,1) 
<console>:7: error: method swap cannot be accessed in scala.collection.mutable.ArrayBuffer[Int] 
     x.swap(0,1) 
     ^

回答

4

根據this documentationswap被聲明爲保護的方法 - 這意味着,儘管你可以的ArrayBuffer代碼(或從ResizableArray派生的任何其它類)內訪問它,不能從其它訪問它類。

Scala Language Specification,第57頁:

protected修飾符適用於 類成員的定義。定義類的模板,
- - 的任何類的伴侶模塊 - 具有定義類的基類,
所有模板類的保護 成員可以從內
訪問 。

你不在任何這些情況下,這就是爲什麼你看到一個錯誤。

+0

是的,保護意味着子類ArrayBuffer可以調用受保護的超類功能swap()。這並不意味着子類的實例創建了對受保護的超類方法的公共訪問。 – DrGary 2009-11-01 17:26:39

相關問題