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

时间:2011-09-11 03:51:01

标签: scala

abstract class Table {
  private val records: Int
}

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

2 个答案:

答案 0 :(得分:19)

对@ Owen的答案进行一点延伸:你可以宣布私人成员。

abstract class Table {
  private val records: Int = 0
}

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

答案 1 :(得分:13)

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

class Foo extends Table {
    override val records = 3
}

会失败,因为recordsTable是私有的。

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