Перейти к содержимому
На этой странице

Классы

Все темы Kotlin Developer

Что такое data class?

data class предназначен для хранения данных. Компилятор создаёт equals(), hashCode(), toString(), componentN() и copy() на основе свойств первичного конструктора. Свойства в теле класса в эти методы не входят. copy() создаёт поверхностную копию, поэтому вложенные объекты могут оставаться общими.


Что такое sealed class?

sealed class ограничивает прямое наследование: прямые подклассы должны находиться в том же пакете и модуле и иметь имя. Их не обязательно объявлять в одном файле. Ограниченная иерархия позволяет компилятору проверять полноту ветвей when. В multiplatform-проектах есть дополнительные правила для source sets.


Что значит ключевое слово object?

object используется в объявлениях и выражениях. Именованное object-объявление создаёт singleton с ленивой потокобезопасной инициализацией при первом обращении. object-выражение создаёт анонимный объект при каждом выполнении. companion object объявляет объект-компаньон класса.


Как объявляются и используются классы в Kotlin?

Классы в Kotlin объявляются с использованием ключевого слова class.

Пример:

class Person(val name: String, var age: Int)

fun main() {
    val person = Person("Alice", 30)
    println("${person.name} is ${person.age} years old")
}

Что такое data class и когда его стоит использовать?

data class — это класс, предназначенный для хранения данных. Он автоматически генерирует полезные методы, такие как equals(), hashCode(), toString(), и copy().

Пример:

data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = user1.copy(age = 31)
    println(user1)  // Выведет User(name=Alice, age=30)
    println(user2)  // Выведет User(name=Alice, age=31)
}

Объясните разницу между open классом и обычным классом.

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

Пример:

open class Parent {
    open fun greet() {
        println("Hello from Parent")
    }
}

class Child : Parent() {
    override fun greet() {
        println("Hello from Child")
    }
}

fun main() {
    val child = Child()
    child.greet()  // Выведет "Hello from Child"
}

Как работает наследование и композиция в Kotlin?

Как реализуется наследование и композиция в Kotlin:

  • Наследование: Один класс наследует свойства и методы другого класса.

    open class Animal(val name: String)
    
    class Dog(name: String) : Animal(name)
    
    fun main() {
        val dog = Dog("Buddy")
        println(dog.name)  // Выведет "Buddy"
    }
  • Композиция: Один класс содержит экземпляры других классов и делегирует им определенные функции.

    class Engine {
        fun start() {
            println("Engine started")
        }
    }
    
    class Car(val engine: Engine) {
        fun drive() {
            engine.start()
            println("Car is driving")
        }
    }
    
    fun main() {
        val engine = Engine()
        val car = Car(engine)
        car.drive()  // Выведет "Engine started" и "Car is driving"
    }

Собеседования: Kotlin

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Kotlin-разработчик, Android-разработчик, Backend-разработчик на Kotlin. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.