Me encontré con una dificultad al aprender Scala. Tengo una jerarquía de herencia que es esencialmente equivalente a esto:Miembros protegidos de otras instancias en Scala
class A {
protected def myMethod() = println("myMethod() from A")
}
class B extends A {
def invokeMyMethod(a: A) = a.myMethod()
}
Pero tratar de compilar este ejemplo, me sale el error "test.scala: 7: Error: myMethod método no se puede acceder en A".
Viniendo de Java, entiendo que los miembros protegidos deben estar accesibles en cualquier punto de una clase derivada, y en ninguna parte he visto nada que me diga que los miembros protegidos en Scala están limitados por ejemplo. ¿Alguien tiene una explicación para esto?
Esta explicación no dice por qué el código del OP no funciona. 'B' _es_ un tipo derivado de' A', justo como se supone que es. –
'B' se deriva de' A', pero está intentando acceder no a su propio miembro protegido 'myMethod', sino a la de otra instancia, el parámetro' a: A'. Un miembro protegido solo es visible para la _instance que lo contiene_ (de forma predeterminada, aunque esto se puede modificar con la anotación de scoping que mencioné). –
Eso contradice bastante el pasaje que ha citado: "incluidas otras instancias del mismo tipo y cualquier tipo derivado". – Submonoid