Ключевое слово this
Ключевое слово this представляет ссылку на текущий объект класса.
Оно используется для доступа к полям и методам объекта,
разрешения конфликтов имен между параметрами конструктора
и полями класса, а также для вызова других конструкторов
того же класса.
Синтаксис
this // ссылка на текущий объект
this.property // доступ к свойству текущего объекта
this.method() // вызов метода текущего объекта
this@ClassName // квалифицированное обращение к внешнему объекту
Пример
Использование this для доступа к свойству класса:
class Person {
var name: String = ""
fun setName(name: String) {
this.name = name
}
fun printName() {
println("Name: ${this.name}")
}
}
val person = Person()
person.setName("John")
person.printName()
Результат выполнения кода:
Name: John
Пример
Разрешение конфликта имен между параметром конструктора и полем класса:
class Car(val brand: String) {
var speed: Int = 0
constructor(brand: String, speed: Int) : this(brand) {
this.speed = speed
}
}
val car = Car("Toyota", 120)
println("Brand: ${car.brand}, Speed: ${car.speed}")
Результат выполнения кода:
Brand: Toyota, Speed: 120
Пример
Использование квалифицированного this для доступа к внешнему классу из внутреннего:
class Outer {
val outerProperty: String = "outer"
inner class Inner {
val innerProperty: String = "inner"
fun printProperties() {
println("Inner property: ${this.innerProperty}")
println("Outer property: ${this@Outer.outerProperty}")
}
}
}
val outer = Outer()
val inner = outer.Inner()
inner.printProperties()
Результат выполнения кода:
Inner property: inner
Outer property: outer
Пример
Использование this для вызова другого конструктора:
class Rectangle {
var width: Int
var height: Int
constructor(size: Int) : this(size, size)
constructor(width: Int, height: Int) {
this.width = width
this.height = height
}
fun area(): Int {
return this.width * this.height
}
}
val square = Rectangle(5)
val rectangle = Rectangle(3, 4)
println("Square area: ${square.area()}")
println("Rectangle area: ${rectangle.area()}")
Результат выполнения кода:
Square area: 25
Rectangle area: 12
Пример
Использование this в расширениях (extension functions):
fun String.addPrefix(prefix: String): String {
return prefix + this
}
val result = "World".addPrefix("Hello ")
println(result)
Результат выполнения кода:
Hello World
Смотрите также
-
ключевое слово
super,
которое используется для доступа к членам родительского класса -
ключевое слово
class,
которое используется для объявления классов -
ключевое слово
constructor,
которое используется для объявления конструкторов -
ключевое слово
inner,
которое используется для объявления внутренних классов