← Назад к вопросам

В чем разница между class и object в Kotlin?

1.3 Junior🔥 291 комментариев
#Kotlin основы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Различие между class и object в Kotlin

В Kotlin концепции class и object являются фундаментальными, но служат для разных целей. Основная разница заключается в том, что class описывает тип (или шаблон), из которого можно создавать множественные экземпляры (объекты), а object — это конструкция языка для создания синглтона, то есть единственного и уникального экземпляра, который существует в единственном числе во время выполнения программы.

Ключевые отличия

1. class: шаблон для создания экземпляров

class определяет структуру данных и поведения (поля, методы). Он может иметь конструкторы, наследоваться от других классов или интерфейсов, и позволяет создавать сколько угодно объектов (экземпляров).

class User(val name: String, val age: Int) {
    fun greet() {
        println("Hello, I'm $name")
    }
}

// Создание нескольких экземпляров класса
val user1 = User("Alice", 25)
val user2 = User("Bob", 30)

2. object: декларация синглтона

object объявляет класс и одновременно создает единственный его экземпляр. Это удобно для реализации синглтона без необходимости написания дополнительного кода для управления единственным экземпляром.

object AppConfig {
    val version = "1.0.0"
    fun getApiUrl(): String = "https://api.example.com"
}

// Использование синглтона (экземпляр уже создан)
val url = AppConfig.getApiUrl()

Объект объявляется и используется как одно и то же имя. Нельзя создать новый экземпляр AppConfig. Это всегда один и тот же объект в памяти.

Основные случаи использования object

Singleton (Одиночка)

Как показано выше, object обеспечивает простой способ создания синглтона в Kotlin без паттернов типа "статический класс".

Object Expression (Анонимные объекты)

Аналог анонимных классов в Java. Используется для создания объекта без объявления нового класса.

val anonymousObject = object {
    val x = 10
    val y = 20
    fun sum() = x + y
}
println(anonymousObject.sum()) // 30

Object Declaration в Companion (Статические члены класса)

companion object внутри класса позволяет создавать статические поля и методы, доступные через имя класса.

class Database {
    companion object {
        private const val CONNECTION_STRING = "jdbc:mysql://localhost"
        
        fun connect() {
            println("Connecting to $CONNECTION_STRING")
        }
    }
}

Database.connect() // Доступ к методу через имя класса

Сравнительная таблица

Критерийclassobject
Количество экземпляровМожно создать множествоСинглтон (один экземпляр)
НаследованиеМожет наследоваться и быть наследованМожет наследоваться от классов/интерфейсов
Анонимные формыНет (нужно объявлять явно)Есть (object expression)
Статические членыТолько через companion objectВсе члены доступны статически
ИнициализацияПри создании экземпляраПри первом обращении (ленивая, если не @JvmStatic)

Когда использовать?

  • Используйте class, когда вам нужно множество экземпляров с одинаковой структурой (например, User, Product).
  • Используйте object, когда требуется единственный экземпляр на всю программу (конфигурация, менеджер, репозиторий) или для анонимных объектов.

В Kotlin object устраняет многие сложности, связанные с синглтонами в Java (например, двойная проверка блокировки), предоставляя безопасный, потокобезопасный и простой способ создания единственных экземпляров.