РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1251 of 1310 menu

Object expression

Object expression позволяет создавать анонимные объекты, которые являются реализациями интерфейсов или наследуются от классов без явного объявления нового подкласса. Такой объект существует только в области видимости, где он был создан, и не имеет имени.

Синтаксис

val obj = object: SuperType1, SuperType2 { // свойства и методы }

Пример

Создадим анонимный объект, реализующий интерфейс ClickListener:

interface ClickListener { fun onClick() } val listener = object: ClickListener { override fun onClick() { println("Button clicked") } } listener.onClick()

Результат выполнения кода:

String "Button clicked"

Пример

Создадим анонимный объект, наследуемый от класса Animal:

open class Animal(val name: String) { open fun makeSound() = "Unknown sound" } val cat = object: Animal("Cat") { override fun makeSound() = "Meow" } println(cat.name) println(cat.makeSound())

Результат выполнения кода:

String "Cat" String "Meow"

Пример

Object expression может реализовывать несколько интерфейсов одновременно:

interface A { fun funcA() } interface B { fun funcB() } val obj = object: A, B { override fun funcA() { println("Function A") } override fun funcB() { println("Function B") } } obj.funcA() obj.funcB()

Результат выполнения кода:

String "Function A" String "Function B"

Пример

Object expression может быть создан без наследования от каких-либо классов или интерфейсов:

val person = object { val name = "John" val age = 30 fun introduce() = "My name is $name and I'm $age years old" } println(person.introduce())

Результат выполнения кода:

String "My name is John and I'm 30 years old"

Пример

Object expression имеет доступ к переменным из окружающей области видимости:

fun createCounter(): () -> Int { var count = 0 return object { fun increment(): Int { return ++count } }.increment } val counter = createCounter() println(counter()) println(counter())

Результат выполнения кода:

Int 1 Int 2

Смотрите также

  • ключевое слово class,
    которое объявляет именованный класс
  • ключевое слово interface,
    которое объявляет интерфейс
  • ключевое слово object,
    которое создает объект-одиночку
  • ключевое слово companion,
    которое создает companion object
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить