5.09. ООП и особенности
ООП и особенности
Kotlin полностью поддерживает ООП. Классы, объекты, наследование, инкапсуляция, полиморфизм — всё доступно.
class Person(val name: String, var age: Int) {
fun greet() {
println("Hello, my name is $name")
}
}
Создание экземпляра:
val person = Person("Alice", 30)
person.greet()
Наследование:
open class Animal // open — чтобы можно было наследовать
class Cat : Animal()
Инкапсуляция:
Поля могут быть private, protected, internal, public.
class User {
private val secret = "password"
}
Дата-классы (data class):
Автоматически генерируют toString(), equals(), hashCode(), copy() и т.д.
data class User(val id: Int, val name: String)
Компаньонные объекты (companion object):
Статические члены в Kotlin реализуются через companion object.
class MyClass {
companion object {
const val VERSION = "1.0"
}
}
Замыкания и лямбда-выражения:
val sum: (Int, Int) -> Int = { a, b -> a + b }
println(sum(2, 3))
Функции высшего порядка и лямбды:
fun process(n: Int, block: (Int) -> Unit) {
block(n)
}
process(5) { println(it) }
Расширения (Extensions):
Можно добавлять методы к существующим классам без изменения их кода.
fun String.addExclamation(): String {
return this + "!"
}
Одно из ключевых преимуществ Kotlin — защита от NullPointerException на уровне языка.
Coroutines (асинхронное программирование):
Kotlin имеет встроенную поддержку корутин для асинхронной и не-blocking работы.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
Аннотации:
Поддерживаются, аналогично Java.
@Deprecated("Use new version")
fun oldFunction() {}
Перегрузка операторов:
data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
}
Вызов Java-кода:
Kotlin полностью взаимодействует с Java. Можно вызывать Java-библиотеки и наоборот.