Czy dobrze używam dziedziczenia w tym przykładzie? Staram się tworzyć programy, żeby poćwiczyć, to, czego nauczyłem się z kursu. Napisałem prosty program, w którym twórzmy postać do gry rpg (na tą chwile klasy poszczególnych ras postaci nie maja dużo metod i pól, zanim dodam więcej chce wiedzieć, czy zmierzam w dobrym kierunku). Moim pytaniem jest, co mógłbym poprawić w kodzie, aby był czytelniejszy i lepiej napisany przynajmniej na poziomie, na którym jestem. Tutaj jest kod
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Character[] characters = {
new Human("Człowiek"),
new Elf("Elf"),
new Dwarf("Krasonlud"),
new DarkElf("Elf Mroku"),
};
for (Character character: characters) {
System.out.println("\n\n");
character.setRace(character);
System.out.println(STR."Tworzę postać \{character.getRace()}");
character.setWeapon(character);
System.out.println(character);
character.attack();
}
}
}
abstract class Character {
Scanner input = new Scanner(System.in);
protected String name;
protected String race;
protected String[] races = {
"Człowiek",
"Elf",
"Krasnolud",
"Elf mroku",
};
protected String weapon;
protected String[] weapons = {
"Miecz",
"Łuk",
"Kij",
"Sztylet",
"Młot"};
protected int hp = 100;
protected void attack() {
System.out.println(STR."Atakuje bronią \{weapon}");
}
protected void setRace(Character c) throws Exception {
if (c instanceof Human) {
c.race = races[0];
} else if (c instanceof Elf) {
c.race = races[1];
} else if (c instanceof Dwarf) {
c.race = races[2];
} else if (c instanceof DarkElf) {
c.race = races[3];
} else {
throw new Exception("Błąd w odnalezieniu rasy");
}
}
public String getRace() {
return race;
}
protected void setWeapon(Character c) {
System.out.println("Jaka broń chcesz wybrać?");
for (int i = 0; i < weapons.length; i++) {
System.out.println(STR."\{i + 1}. \{weapons[i]}");
}
System.out.print("Twój wybór: ");
int choice = input.nextInt();
c.weapon = weapons[choice - 1];
}
@Override
public String toString() {
return STR."Mam na imię \{name}\nMam \{hp} punktów zdrowia\nMoja rasa to \{race}";
}
}
class Human extends Character {
Human(String name) {
this.name = name;
}
@Override
protected void attack() {
System.out.println("Atak człowieka");
super.attack();
}
}
class Elf extends Character {
Elf(String name) {
this.name = name;
}
@Override
protected void attack() {
System.out.println("Atak Elfa");
super.attack();
}
}
class Dwarf extends Character {
Dwarf(String name) {
this.name = name;
}
@Override
protected void attack() {
System.out.println("Atak Krasnoluda");
super.attack();
}
}
class DarkElf extends Character {
DarkElf(String name) {
this.name = name;
}
@Override
protected void attack() {
System.out.println("Atak Elfa Mroku");
super.attack();
}
}