В чем разница между модификаторами доступа public, private и protected

«В чем разница между модификаторами доступа public, private и protected» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

public — доступен из любого класса.
private — доступен только внутри своего класса.
protected — доступен внутри класса и его наследников.

Пример:

open class Parent {
    public val a = 1     // доступно везде
    private val b = 2    // только внутри Parent
    protected val c = 3  // Parent + наследники
}

class Child : Parent() {
    fun test() {
        println(a) // OK
        // println(b) // Ошибка: private
        println(c) // OK (protected)
    }
}