Подтвердить что ты не робот

Абстрактные классы, почему мы не можем объявить частный член val и var?

abstract class Table {
  private val records: Int
}

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

4b9b3361

Ответ 1

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

class Foo extends Table {
    override val records = 3
}

завершится с ошибкой, потому что records является закрытым для Table.

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

Ответ 2

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

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

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