Являются ли классы в Kotlin закрытыми или открытыми по умолчанию

Ответ

В Kotlin классы по умолчанию final (закрытые для наследования). Чтобы разрешить наследование, нужно явно указать модификатор open:

class FinalClass // Нельзя наследовать

open class OpenClass // Можно наследовать

Это принципиальное отличие от Java, где классы по умолчанию открыты. Такое поведение в Kotlin способствует лучшему проектированию, так как наследование должно быть осознанным решением. Для переопределения методов также требуется open.

Ответ 18+ 🔞

Ну вот, опять про эту финальность классов в Kotlin. Слушай, история пиздец как простая, но у новичков постоянно мозг ломает. В Java-то ты привык, что взял любой класс и наследуйся на здоровье, хоть до потери пульса. А тут пришёл в Kotlin — и на тебе, ёпта, стоп-кран!

Смотри, тут всё как в жизни. Представь себе дверь. В Java все двери по умолчанию открыты нараспашку, заходи кто хочешь, хуй с горы. А в Kotlin — дверь сразу на замке, и ключ только у того, кто её ставил. Хочешь кого-то пустить — скажи явно: open. Вот и вся философия.

class FinalClass // Нельзя наследовать — стоит как крепость, блядь

open class OpenClass // Можно наследовать — вот теперь добро пожаловать, проходите, садитесь

И это, знаешь, не просто так, не прихоть какая-то. Это чтобы ты, чувак, головой думал, прежде чем плодить иерархии. Наследование — это овердохуища ответственности, а не "ой, методчик один перепишу и всё". В Kotlin тебя заставляют это решение осознать. Хочешь быть родителем — пометься open. Не хочешь — сиди в своей final-крепости и не парься.

С методами та же самая песня, ядрёна вошь. Даже если класс open, его методы по умолчанию — неприкосновенные святыни. Хочешь переопределить? Иди нахуй! Шучу. Хочешь переопределить — пометь и метод open. А то мало ли что.

open class Parent {
    fun finalMethod() {} // Трогать нельзя, руки прочь!
    open fun overridableMethod() {} // А вот эту уже можно переписать, если очень хочется
}

И знаешь что? После такого подхода код становится чище, а архитектура — крепче. Волнение ебать, но терпения ноль, когда видишь, как кто-то лезет с наследованием, не подумав. А тут тебя сразу останавливают: "Э, сабака сука, э бошка думай! Ты точно этого хочешь?"

Короче, запомни раз и навсегда: Kotlin по умолчанию — недоверчивая сука. final везде, доверия ебать ноль. Хочешь отношений — открывайся явно. Всё как у людей.