Junior
Как работят ключовите думи 'super' и 'this' в Kotlin?
sobes.tech AI
Отговор от AI
this се отнася за текущия екземпляр на класа или получателя на израза lambda. Използва се за явно указване на член на класа или препратка към текущия обект, когато има неяснота (например, когато има локална променлива със същото име).
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("Здравей от детето")
}
}
Когато се използва в lambda функции, this може да се отнася към получателя на lambda:
fun String.addExclamation(): String {
return this + "!" // this се отнася към получателя на стринга
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum е разширена функция, this вътре се отнася към списъка numbers
println(sum)
}
За разрешаване на неясноти, когато имате вложени класове или lambda с получатели, можете да използвате квалифицирания this (this@ClassName или this@label):
class A { // неявен етикет @A
inner class B { // неявен етикет @B
fun Int.foo() { // неявен етикет @foo
val a = this@A // препратка към екземпляра A
val b = this@B // препратка към екземпляра B
val c = this // препратка към екземпляра Int, получател на функцията foo
val c1 = this@foo // препратка към екземпляра Int, получател на функцията foo
}
}
}