Для чего свойство класса создается в другом классе?
Наткнулся на метаните, на не понятный мне момент. Почему экземпляр класса создается в совершенно другом классе? Почему сделали именно так? В каких моментах такое используется ?
Ну смысле зачем. Ты создаешь персону, и тебе нужно получить название компании персоны. Если company не инициализовано, то там null, ты обращаешься пытаясь получить компанию, и у тебя всё ломается. А так у тебя все персоны по умолчанию имеют компанию unknown. Можно обращаться сразу к этому свойству без проверок, если конечно кто-то принудительно не запишет туда null.
Убери это присвоение и вызови print, и увидишь ошибку.
Почему экземпляр класса company создаётся в конструкторе класса Person - из-за того что писавшему пример лень было показать что-то более приближенное к реальности (в реальности так писать обычно не следует).
Почему класс Person содержит поле типа Company - потому что автору так понадобилось.
Почему нет?
the principle that classes should achieve polymorphic behavior and code reuse by their composition (by containing instances of other classes that implement the desired functionality) rather than inheritance from a base or parent class
принцип, согласно которому классы должны достигать полиморфного поведения и повторного использования кода за счет своей композиции (путем помещения в них экземпляров других классов, реализующих желаемую функциональность), а не наследования от базового или родительского класса
the principle that classes should achieve polymorphic behavior and code reuse by their composition (by containing instances of other classes that implement the desired functionality) rather than inheritance from a base or parent class
принцип, согласно которому классы должны достигать полиморфного поведения и повторного использования кода за счет своей композиции (путем помещения в них экземпляров других классов, реализующих желаемую функциональность), а не наследования от базового или родительского класса
Это странное мнение. В данном случае "композиция" ни как не идёт в противоречие с "наследованием". Здесь обычный сборный контейнер.
Сущность из других сущностей. Нет смысла наследовать человека от компании или наоборот.
Так что тут не именно "композиция", а простая инкапсуляция.
Т.е. персона имеет данные о компании. Объект компании создается внутри класса персоны и доступен для изменения сразу, без инициализации извне.
Hemul GM, скажем "работник" хочет "уйти на больничный". и полечиться
если он работает у "работадателя" то работадатель предостваляет метод уйти на больничный - сам "работник" этого не делает - просит "работадателя" это композиция
как конкретно "лечится" работнику работадатель етественно не знает у него методов нету это работник сам или смотри выше
Здесь просто описан класс "персона", который содержит информацию о компании. Компания - другой класс. Создается объект "компания" внутри конструктора, чтоб иметь возможность сразу к нему обращаться. Своего рода инкапсуляция. Если поставить приват на поле и добавить геттер, то будет всё даже корректно.