Над первым оператором печати я понимаю, что создаю новую «коробку» под названием player, в которой я устанавливаю значение здоровья равным 50. (Игнорируя Берта и нож). Таким образом, значение здоровья, потому что оно находится в диапазоне от 0 до 100, меняется на 50. Над вторым оператором печати я использую ключевое слово «новый», поэтому я создаю новый «ящик», также называемый игроком, и «переопределяю» поле первого игрока. "и попробуйте передать значение здоровья 200, но 200 не между 0-100, поэтому значение по умолчанию установлено равным 100. То, что я пытаюсь достичь без использования метода сеттера в моем классе PlayerNoLeaks, это" быть в том же поле ", так что значение, которое я сначала передаю, равно 50, поэтому здоровье = 50, затем попробуйте передать 200, но не может иметь значение от 0 до 100, поэтому значение остается равным 50. Если я выберу значение по умолчанию 100 в PlayerNoLeaks, то значение 0 печатается, поэтому я держу пари, что что-то не так, когда я снова использую ключевое слово «new» в основном классе.
Надеюсь, это имеет смысл.
Спасибо!
public class Main {
public static void main(String[] args) {
PlayerNoLeaks player = new PlayerNoLeaks("Bert", 50, "Knife");
System.out.println("Initial health is " + player.getHealth()); //prints 50
player = new PlayerNoLeaks("Alma", 200, "Sword"); //prints 100
System.out.println(player.getHealth());
}
}
public class PlayerNoLeaks {
private String name;
private int health = 100; //default value
private String weapon;
public PlayerNoLeaks(String name, int health, String weapon) {
this.name = name;
if(health > 0 && health <= 100) {
this.health = health;
}
this.weapon = weapon;
}
public void loseHealth(int damage) {
this.health -= damage;
if(this.health <= 0) {
System.out.println("Player knocked out!");
}
}
public int getHealth() {
return health;
}
}