---
title: Классы
seo:
  title: Классы — Kotlin Developer
  description: Тема «Классы» для собеседования Kotlin Developer. Что такое data class? Что такое sealed class?
---

[Все темы Kotlin Developer](/kotlin-developer)

## <strong>Что такое</strong> <code>data class</code><strong>?</strong> [#q-14bee738d69b8179b2f1df5eaede6da7]

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

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Что такое</strong> <code>sealed class</code><strong>?</strong> [#q-14bee738d69b81a7a72cc18de878edc0]

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

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Что значит ключевое слово</strong> <code>object</code><strong>?</strong> [#q-14bee738d69b812f86e4dc6ec83e6a51]

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

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Как объявляются и используются классы в Kotlin?</strong> [#q-14bee738d69b81c5b879cf8825a72122]

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

Пример&#58;

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

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

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Что такое</strong> <code>data class</code> <strong>и когда его стоит использовать?</strong> [#q-14bee738d69b819b975df245207bc015]

<code>data class</code> — это класс, предназначенный для хранения данных. Он
автоматически генерирует полезные методы, такие как
<code>equals&#40;&#41;</code>, <code>hashCode&#40;&#41;</code>,
<code>toString&#40;&#41;</code>, и <code>copy&#40;&#41;</code>.

Пример&#58;

```kotlin
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)
}
```

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Объясните разницу между</strong> <code>open</code> <strong>классом и обычным классом.</strong> [#q-14bee738d69b81fba32add6c2fdeb09d]

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

Пример&#58;

```kotlin
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"
}
```

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::

---

## <strong>Как работает наследование и композиция в Kotlin?</strong> [#q-14bee738d69b81359952f114b7fcd1a2]

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

- <strong>Наследование</strong>&#58; Один класс наследует свойства и методы
  другого класса.

  ```kotlin
  open class Animal(val name: String)

  class Dog(name: String) : Animal(name)

  fun main() {
      val dog = Dog("Buddy")
      println(dog.name)  // Выведет "Buddy"
  }
  ```

- <strong>Композиция</strong>&#58; Один класс содержит экземпляры других классов
  и делегирует им определенные функции.

  ```kotlin
  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"
  }
  ```

:::note[Ссылки для изучения]

1. [Классы в Kotlin](https://kotlinlang.ru/docs/classes.html)
   :::
