Абстрактные классы, почему мы не можем объявить закрытый член класса val и var? - PullRequest
13 голосов
/ 11 сентября 2011
abstract class Table {
  private val records: Int
}

Это потому, что нам нужно создать экземпляр абстрактного класса, прежде чем мы сможем получить доступ к его закрытому члену?

Ответы [ 2 ]

19 голосов
/ 11 сентября 2011

Чтобы немного расширить ответ @ Оуэна: вы можете объявить закрытых членов.

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

Но вы не можете объявлять абстрактных закрытых членов. Зачем? Потому что любой конкретный класс, который расширяет абстрактный класс, должен переопределять любые абстрактные члены, и он не может переопределять закрытый член. Таким образом, у вас не может быть никаких конкретных классов, которые вообще расширяют Table.

13 голосов
/ 11 сентября 2011

Я бы подумал, что это потому, что нет никакого способа сделать их конкретными:

class Foo extends Table {
    override val records = 3
}

потерпит неудачу, потому что records является приватным для Table.

Это сделает Table бесполезным. Я не вижу, что это повредит чему-либо, просто это почти наверняка указывает на ошибку программиста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...