Привет! Сегодня я хочу рассказать вам о своем опыте написания кода на Java, используя принципы объектно-ориентированного программирования (ООП). В частности, я реализовал абстрактный класс Warrior с некоторыми полями, а также создал интерфейс Weapon для вооружения.Для начала, я определил класс Warrior с тремя полями⁚ name (имя воина), weapon (вооружение воина) и healthPoint (количество здоровья). Этот класс я пометил как абстрактный, так как он будет являться базовым для других классов-наследников.java
public abstract class Warrior {
protected String name;
protected Weapon weapon;
protected int healthPoint;
public Warrior(String name, Weapon weapon, int healthPoint) {
this.name name;
this.weapon weapon;
this.healthPoint healthPoint;
}
public abstract void attack;
public abstract void defend;
}
Затем я создал интерфейс Weapon с единственным методом damage, который будет определять наносимый урон.java
public interface Weapon {
void damage;
}
Теперь я могу создать различные типы воинов на основе класса Warrior. Для примера, я создал классы Knight и Archer, которые представляют воинов с различными типами вооружения.java
public class Knight extends Warrior {
public Knight(String name, Weapon weapon, int healthPoint) {
super(name, weapon, healthPoint);
}
@Override
public void attack {
System.out.println(″Рыцарь ″ name ″ атакует с помощью ″ weapon.getName);
weapon.damage;
}
@Override
public void defend {
System.out.println(″Рыцарь ″ name ″ защищается″);
}
}
public class Archer extends Warrior {
public Archer(String name, Weapon weapon, int healthPoint) {
super(name, weapon, healthPoint);
}
@Override
public void attack {
System.out.println(″Лучник ″ name ″ атакует с помощью ″ weapon.getName);
weapon.damage;
}
@Override
public void defend {
System.out.println(″Лучник ″ name ″ защищается″);
}
}
Также я создал различные виды вооружения, такие как меч и лук, реализовав интерфейс Weapon. У каждого типа вооружения есть свои уникальные свойства, например, у лука есть свойство ″дальность стрельбы″.java
public class Sword implements Weapon {
private final String name ″меч″;
@Override
public void damage {
System.out.println(″Меч наносит урон″);
}
public String getName {
return name;
}
}
public class Bow implements Weapon {
private final String name ″лук″;
private int range;
public Bow(int range) {
this.range range;
}
@Override
public void damage {
System.out.println(″Лук наносит урон″);
}
public String getName {
return name;
}
public int getRange {
return range;
}
}
Для создания различных видов шитов я добавил в семейство классов Warrior обобщения, включающие в себя щиты. Это позволяет воинам иметь разные типы щитов.java
public class Shield
private T owner;
private int durability;
public Shield(T owner, int durability) {
this.owner owner;
this.durability durability;
}
public void protect {
System.out.println(″Щит воина ″ owner.name ″ защищает от атаки″);
durability—;
if (durability < 0) {
System.out.println(″Щит сломан″);
}
}
}
Добавление метода определения минимального щита в команде, а также создание воина без щита, не представляют большой сложности. Я добавил новый метод в класс команды, который проходит по всем воинам и находит воина с минимальным значением прочности щита.java
public class Team {
private List
public Team(List
this.warriors warriors;
}
public void findMinimumShield {
Shield
for (Warrior warrior ⁚ warriors) {
if (warrior.weapon instanceof Shield) {
Shield> shield (Shield>) warrior.weapon;
if (minShield null || shield.durability < minShield.durability) {
minShield shield;
}
}
}
System.out.println(″Минимальный щит в команде⁚ ″ minShield);
}
}
Надеюсь, мой опыт в написании кода на Java, используя ООП, будет вам полезен. Я на практике показал, как можно реализовать абстрактный класс, интерфейс, различные типы вооружения и возможность добавления уникальных признаков к оружию. Кроме того, я показал, как использовать обобщения для добавления щитов в классы-наследники.