Как печатается «House Blend, Mocha, Mocha», когда нет сохраненного явного состояния?
Вы создаете 3 разных объекта.Давайте назовем их а, б и в.Таким образом, мы можем переписать код так:
Beverage a = new HouseBlend();
Beverage b = new Mocha(a);
Beverage c = new Mocha(b);
System.out.println(c.getDescription() + " * "+c.cost());
, который будет делать то же самое, что и ваш код, но более ясно, что вы имеете дело с 3 различными объектами.Назначение
blend = new Mocha(blend);
не заменяет объект, но фактически создает новый объект и просто изменяет ссылочную смесь на новый объект.
Когда вы вызываете blend.getDescription () в своем коде, выссылаются на объект c, который вызывает getDescription объекта b, который вызывает getDescription объекта a.GetDescription () объекта a возвращает строку «House Blend».Итак, getDescription () объекта b возвращает «House Blend, Mocha».И getDescription () объекта c затем возвращает «House Blend, Mocha, Mocha».
С getCost () происходит нечто похожее.