Абстрактные классы, почему мы не можем объявить частный член val и var?
abstract class Table {
private val records: Int
}
Это потому, что мы должны создать экземпляр абстрактного класса, прежде чем мы сможем получить доступ к его частному члену?
Ответ 1
Я бы предположил, что это потому, что нет никакого способа сделать их конкретными:
class Foo extends Table {
override val records = 3
}
завершится с ошибкой, потому что records является закрытым для Table.
Это сделало бы Table бесполезным. Я не вижу, что это повредит что-нибудь, просто это почти наверняка указывает на ошибку программиста.
Ответ 2
Чтобы расширить бит в ответ @Owen: вы можете объявить закрытых членов.
abstract class Table {
private val records: Int = 0
}
Но вы не можете объявлять абстрактных частных членов. Зачем? Поскольку любой конкретный класс, который расширяет абстрактный класс, должен переопределять любые абстрактные элементы и не может переопределять частный член. Таким образом, у вас не было бы никаких конкретных классов, которые расширяют Table вообще.