🤔
Если внутри класса добавить object и companion object, какая между ними разница?Если внутри класса добавить object и companion object, какая между ними разница?
🚩
Обычный объект внутри классаКогда вы добавляете обычный объект внутри класса, вы создаете именованный объект, который является экземпляром анонимного класса. Он может содержать свойства и методы, и он создается один раз при создании экземпляра внешнего класса.
class MyClass {
let instanceProperty = "Instance Property"
struct MyObject {
static let objectProperty = "Object Property"
static func objectMethod() {
print("This is an object method")
}
}
}
// Использование
let myClassInstance = MyClass()
print(MyClass.MyObject.objectProperty) // Доступ к свойствам и методам объекта через имя объекта
MyClass.MyObject.objectMethod()
Companion Object (компаньон-объект)Companion object
позволяет определить статические члены класса. Эти члены доступны без создания экземпляра класса. Вы можете использовать
companion object
для хранения статических методов и свойств, которые могут быть вызваны напрямую через имя класса.
class MyClass {
let instanceProperty = "Instance Property"
companion object {
let companionProperty = "Companion Property"
func companionMethod() {
print("This is a companion object method")
}
}
}
// Использование
🚩
Основные различия
🟠
ДоступностьОбычный объект: Доступ к свойствам и методам обычного объекта осуществляется через его имя. Companion Object: Доступ к свойствам и методам компаньон-объекта осуществляется через имя класса.
🟠
Использование в контексте экземпляров классаОбычный объект: Не привязан к конкретному экземпляру класса и создается один раз для всего класса. Companion Object: Также не привязан к конкретному экземпляру класса и создается один раз для всего класса, но служит для определения статических членов класса.
🟠
Неявное имяОбычный объект: Требует явного имени для доступа. Companion Object: Имеет неявное имя Companion, если не указано другое имя. Это позволяет получить доступ к его членам без явного указания имени.
🚩
Пример использования и различий class MyClass {
val instanceProperty = "Instance Property"
object MyObject {
val objectProperty = "Object Property"
fun objectMethod() {
println("This is an object method")
}
}
companion object {
val companionProperty = "Companion Property"
fun companionMethod() {
println("This is a companion object method")
}
}
}
// Доступ к свойствам и методам объекта через имя объекта
println(MyClass.MyObject.objectProperty)
MyClass.MyObject.objectMethod()
// Доступ к свойствам и методам компаньон-объекта через имя класса
println(MyClass.companionProperty)
MyClass.companionMethod()
Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний