Назад к вопросам
Middle
68
questionbank

Как разделить методы и свойства класса и объекта?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Свойства:

  • Свойства класса: Общие для всех объектов данного класса. Изменение свойства класса в одном месте видно во всех других местах, обращающихся к этому классу.
  • Свойства объекта: Уникальны для каждого экземпляра класса. Изменение свойства объекта не влияет на другие объекты того же класса.

Методы:

  • Методы класса: Вызываются непосредственно на классе, без создания объекта. Они часто используются для фабричных методов или служебных функций, не зависящих от состояния конкретного объекта. Не имеют доступа к свойствам объекта.
  • Методы объекта: Вызываются на конкретном экземпляре класса. Имеют доступ как к свойствам объекта, так и к свойствам класса.

Пример на Kotlin:

class ExampleClass {
    // Свойство класса (статическое): общее для всех экземпляров
    companion object {
        const val CLASS_PROPERTY = "Я свойство класса"
    }

    // Свойство объекта: уникальное для каждого экземпляра
    var objectProperty: String = "Я свойство объекта"

    // Метод класса (статический): вызывается без создания объекта
    companion object {
        fun classMethod() {
            println("Я метод класса")
            // Нельзя напрямую получить доступ к objectProperty отсюда
        }
    }

    // Метод объекта: вызывается на конкретном экземпляре
    fun objectMethod() {
        println("Я метод объекта")
        println("Доступ к objectProperty: $objectProperty")
        println("Доступ к CLASS_PROPERTY: $CLASS_PROPERTY")
    }
}

fun main() {
    // Использование свойств и методов класса
    println(ExampleClass.CLASS_PROPERTY)
    ExampleClass.classMethod()

    // Создание и использование объекта
    val obj1 = ExampleClass()
    obj1.objectProperty = "Значение для obj1"
    println(obj1.objectProperty)
    obj1.objectMethod()

    val obj2 = ExampleClass()
    // objectProperty у obj2 имеет значение по умолчанию
    println(obj2.objectProperty)
    obj2.objectMethod()
}