Классы
Что такое 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" }