2009-10-31 63 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

相关问题