2009-10-31 8 views
1

ArrayBuffer étend ResizableArray qui inclut une méthode protégée, swap. Pourtant, je ne peux pas accéder à l'échange. Qu'est-ce que je rate?Impossible d'accéder à la méthode protégée de ResizableArray, swap, à partir de la sous-classe ArrayBuffer?

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) 
     ^

Répondre

4

Selon this documentation, swap est déclarée comme une méthode protégée - ce qui signifie que si vous pouvez y accéder dans le code de ArrayBuffer (ou toute autre classe dérivée de ResizableArray), vous ne pouvez pas y accéder à partir d'autres classe.

De l'Scala Language Specification, la page 57:

Le modificateur protégé applique aux définitions membres de la classe. Protégés membres d'une classe sont accessibles à partir de
- le modèle de la classe de définition,
- tous les modèles qui ont la classe définissant comme une classe de base,
- le module compagnon de l'une de ces classes.

Vous n'êtes dans aucun de ces contextes, c'est pourquoi vous voyez une erreur.

+0

Oui, protégé signifie que la sous-classe ArrayBuffer peut appeler la fonction de superclasse protégée swap(). Cela ne signifie pas que les instances de la sous-classe créent un accès public aux méthodes de superclasse protégées. – DrGary

Questions connexes