В вашем коде есть несколько проблем, связанных с созданием Человека.
Задача 1
Первая проблема - создание Человека с конструктором всех аргументов. Таким образом, setStrength (...) и setMagicAmount (...) никогда не вызываются.
Решение 1
Используйте сеттеры. Обратите внимание, это все равно не будет работать. См. Задачи 2 и 3.
public Human(String name, int strength, String weapon, int magicAmount) {
this.name = name;
//this.strength = strength;
setStrength(strength); // not this will still not work! Problem 2 and 3
this.weapon = weapon;
//this.magicAmount = magicAmount;
setMagicAmount(magicAmount); // Will still not work. See Problem 3
}
Решение 2
Вместо того, чтобы иметь конструктор all args, вы можете иметь конструктор no args и затем вызывать сеттеры. Все равно не будет работать. Se задачи 2 и 3.
Human human = new Human();
human.setName(name);
human.setStrength(strength); // will not work. See problem 2 and 3
human.setWeapon(weapon);
human.setMagicAmount(magicAmount); // will not work. See problem 3
Задача 2
Класс Human расширяет Характер, но все же вы переопределяете метод setStrength (...) внутри человека. У этого метода нет никаких правил.
Удалите этот метод внутри Human, и будет вызван правильный setStrength (...) из Character с правилами, потому что он наследуется. Это все равно не будет работать. См. Задачу 4.
Задача 3
У вас есть правила внутри setStrength (...) и setMagicAmount (...) с проверками диапазона. Проблема в том, что проверка диапазона для обоих методов неверна и вам не нужна l oop.
Решение
Сначала проверьте значение. Если за пределами диапазона сообщите пользователю, в противном случае установите значение.
Для setStrength (...) измените на
public void setStrength(int strength) {
if (strength < 0 || strength > 18) { // less than 0 or more than 18
throw new IllegalArgumentException("Value is out of range 0-18");
}
this.strength = strength;
}
Для setMagicAmount (...) измените на
public void setMagicAmount(int magicAmount) {
if (magicAmount < 0 || magicAmount > 50) { // less than 0 or more than 50
throw new IllegalArgumentException("Value is out of range 0-50");
}
this.magicAmount = magicAmount;
}