我认为这可能适用于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
就好了,但似乎无法改变它。为什么会出现这种差异?IGNORE UP TO HERE
删除[this]
没有任何区别,但让alterMember
公开&#34;修复&#34;它 - 但提供了我不想要的member
访问级别。
答案 0 :(得分:0)
根据@MuratMustafin的建议,这里的答案是保护member
和两个私有方法。
还有什么问题,我需要在尝试编译myBaseClass
之前编译mySubClass
,否则会说mySubClass
找不到那些受保护的方法。也许Scala编译器与Java编译器的不同之处在于它不会自动知道将它们全部编译,或者按顺序编译它们。