Как работают ключевые слова 'super' и 'this' в Kotlin?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
this ссылается на текущий экземпляр класса или получателя лямбда-выражения. Используется для явного указания члена класса или ссылки на текущий объект, когда возникает неоднозначность (например, при наличии локальной переменной с тем же именем).
super используется для вызова методов или доступа к свойствам из родительского класса. Применяется, когда нужно использовать реализацию родительского класса вместо переопределенной реализации в текущем классе.
Примеры:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Явное использование this для доступа к свойству
}
}
open class Parent {
open fun greet() {
println("Привет из родителя")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Вызов метода родительского класса
println("Привет из потомка")
}
}
При использовании в лямбда-функциях, this может относиться к получателю лямбды:
fun String.addExclamation(): String {
return this + "!" // this ссылается на строку-получатель
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum - функция расширения, this внутри ссылается на список numbers
println(sum)
}
Для разрешения неоднозначности, когда у вас есть вложенные классы или лямбды с получателями, можно использовать квалифицированный this (например, this@ClassName или this@label).
class A { // неявный label @A
inner class B { // неявный label @B
fun Int.foo() { // неявный label @foo
val a = this@A // ссылка этого на экземпляр A
val b = this@B // ссылка этого на экземпляр B
val c = this // ссылка этого на экземпляр Int, который является получателем функции foo
val c1 = this@foo // ссылка этого на экземпляр Int, который является получателем функции foo
}
}
}