抽象类,为什么我们不能声明私有val和var类成员?

myt*_*mer 13 scala

abstract class Table {
  private val records: Int
}
Run Code Online (Sandbox Code Playgroud)

是因为我们必须先创建一个抽象类的实例才能访问其私有成员吗?

Ale*_*nov 19

为了扩展@ Owen的答案:你可以声明私人成员.

abstract class Table {
  private val records: Int = 0
}
Run Code Online (Sandbox Code Playgroud)

但是你不能声明抽象的私人成员.为什么?因为任何扩展抽象类的具体类必须覆盖任何抽象成员,并且它不能覆盖私有成员.所以你根本没有任何具体的课程Table.


Owe*_*wen 13

我想这是因为没有办法使它们具体化:

class Foo extends Table {
    override val records = 3
}
Run Code Online (Sandbox Code Playgroud)

会失败,因为records是私人的Table.

它会变得Table毫无用处.我无法看到它会伤害任何东西,只是它几乎肯定表明程序员的错误.