Пример полиморфизма? (Принцип подстановки и поздний динамический c переплет) - PullRequest
0 голосов
/ 17 апреля 2020

Ниже приведен фрагмент моего кода, и я не могу решить, является ли он примером полиморфизма.

Иерархия классов 1

В моем классе Player (это подкласс Character) есть метод showStats ().

public String showStats(){    // Displays all current stats regarding the player.
    String stats = "<html><br>Name: "+ getName()+ "<br>Type: "+ getCharacterType() + "<br>Health: "+ getHealth() +"<br>Weapon Equipped: "+ getWeaponEquippedName()+"<br>Miles Walked: "+getWalked()+"<br>"+showInventory()+"<br>Level Completed: "+getLevelCompleted();
    return stats;
}

Этот метод переопределен в классах Мага и Воина из-за исключительной статистики, которой могли бы обладать только Воины и Маги, если они принадлежат к этому типу (Воины имеют атрибут очков силы, а Маги имеют атрибут очков кражи) ,

Класс Волшебника:

public String showStats(){ // Overridden method that shows all player stats including the number of steal points.
    String stats = super.showStats()+"<br>Steal Points: "+getMana()+"</html>";
    return stats; }

Класс Воина:

public String showStats(){ // Overridden method that shows all player stats including the number of Power Points if they are a Warrior.
    String stats = super.showStats()+"<br>Power Points: "+getMana()+"</html>";
    return stats;
}

В классе Battle я вызываю метод showStats (), и вывод не известен, пока Пользователь выбрал, какого персонажа они будут играть sh. Я просто хотел быть уверен, что это пример полиморфизма, так как выбранный символ не известен, пока программа не будет скомпилирована, а затем выбрана пользователем (т. Е. Принцип замещения и Late Dynami c Binding).

public static void gameMenu(Player player, int choice, String name)throws FileNotFoundException, IOException, ClassNotFoundException { // Game menu method is for displaying all options (Play game, view game rules, quit) to the user when the game runs.
       //Substitution principle applied to the player object depending upon what character the player wishes to select.
       if (choice == 3) {
           player = new Attack_Warrior();
       }
       else if (choice == 4) {
           player = new Defensive_Warrior();
       }
       else if (choice == 5) {
           player = new Attack_Magician();
       }
       else if (choice == 6) {
           player = new Defensive_Magician();
       }
       else{
           System.out.println("Error. Try again.");
           play(player);                                     // If the user enters an invalid input, the method loops and asks the player to re-enter their input.
       }

Большое спасибо за ваше время, и я с нетерпением жду вашего ответа, Алекс

1 Ответ

0 голосов
/ 17 апреля 2020

Полезно аннотировать метод ваших дочерних классов с помощью @Override. Если вы не получите ошибку компиляции, любой код, написанный с родительским типом, будет правильным полиморфом c call; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...