Я полагаю, что вариант, который лучше всего следует принципам объектно-ориентированного программирования, состоит в том, чтобы передать фактического игрока в качестве аргумента, а не только деньги.
В основном, передавая только деньги игрока вместо игрокаСами по себе, как просто передать свой кошелек в кассу. Вы бы этого не сделали, верно?
Таким образом, продавец может спросить клиента, достаточно ли у него денег, позвонив по номеру player.getMoney()
, и клиент может сказать ему ответ.
После совершения покупки игрок может самостоятельно снять деньги со своего кошелька, когда клерк попросит их набрать player.setMoney()
.
Теперь вы спросили в комментарии о «передаче фактического игрока в качестве аргумента без созданияновый объект класса игрока. "Java передает аргументы по значению, а значения всех объектов - это просто адрес, который содержит информацию для этого конкретного экземпляра.
Итак, для Player p1 в бета-версии давайте представим, что вся информация p1 хранится в блоке, начиная с... скажем, адрес 21343. В этом случае переменная p1 содержит только это одно число, 21343.
Поскольку Java проходит по значению, то при вызове s1.clerk(Player player)
переменная player
будеттакже содержат 21343. Поскольку он редактирует элементы, содержащиеся по тому же адресу, вы, по сути, передали p1
вместо создания нового игрока. Короче говоря, клерк и метод main работают с одним и тем же объектом.
Тот факт, что Java передается по значению, также является причиной того, что передача только денег игрока не регулирует их автоматически:чем объект. Поскольку это int, когда вы передаете его клерку, вы просто говорите: «Эй, клерк, это сумма денег, с которой ты работаешь». Но продавец не имеет ни малейшего представления, кому принадлежат эти деньги, поэтому, хотя он может взять деньги или даже дать их, по сути, он просто кладет их на прилавок, и игрок обязан забрать их оттуда, когда ониготовоПередавая вместо этого игрока, клерк знает, кому принадлежат деньги, потому что он на самом деле спрашивает игрока, сколько у него денег.