Розбираємося, чому Kotlin вимагає явного перевизначення через
open і
override, як правильно перевизначати методи та властивості (
open
fun,
open
val/
var), чому дозволений трюк
val
→
var, що означає
final override і як модифікатор видимості
protected допомагає дати нащадкам доступ до внутрішніх деталей, не перетворюючи API на «вітрину внутрішньої кухні».