Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Классы

Все темы 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"
    }

Эта страница была полезной?