【发布时间】:2017-01-19 10:48:12
【问题描述】:
我认为这可能适用于 Java 和 Scala,但是 - 学习 Scala 一周后,所以尝试一下。我有这个:
class myBaseClass {
private var member: Int = 100
def doStuff(): Unit ={
checkMember()
alterMember(5)
}
private[this] def checkMember(): Unit = {
//throws exception if member < 0
}
private[this] def alterMember(i : Int): Unit = {
member -= i
}
}
然后我有一个继承了很多的类,只覆盖了一个方法来调用 alterMember 具有不同的值:
class mySubClass extends myBaseClass {
override def doStuff(): Unit ={
checkMember() // gives compiler error
alterMember(10) // gives compiler error AND IntelliJ says "alterMember inaccessible from this place"
}
}
checkMember() 和 alterMember 就像私有的 getter 和 setter 一样。 (我只希望 doStuff 能够更改 member ,并且都是继承的。错误 - 忽略这个我不明白为什么 mySubClass 显然能够访问私有成员,因为 checkMember 很好,但它似乎无法改变它。为什么会有这种差异?忽略这里
删除[this] 没有区别,但将alterMember 公开“修复”它 - 但提供了我不想要的member 访问级别。
【问题讨论】:
-
请发布您的实际,编译重现问题的代码 - 您在上面发布的代码包含语法错误,例如您在
checkMember前面忘记了def和alterMember在myBaseClass和=之间,在Unit和{之间。 -
我不知道你是如何使
checkMember()编译的,但我在这两种方法上都“无法从这个地方访问”。我建议使用protected! -
感谢您指出错误,已修复。我的原始代码无法编译 - 并且包含更多详细信息和其他类的细节,这可能会掩盖我所追求的特定概念。
-
我无法用您的固定代码重现您的问题。在 Scala 2.12 REPL 中,对这两种方法的调用都会给出“错误:未找到:值
”。 -
嗯...通过编译它给了我
error: not found:两种方法。但 IntelliJ 只抱怨(在编辑时)后者。
标签: scala inheritance private