Вопрос по интерфейсам и классам java

95
23 марта 2021, 11:30

Допустим есть интерфейс Soldier

public interface Soldier {
    String makeCombat();
}

Его реализует Infantryman

public class Infantryman implements Soldier {
    @Override
    public String makeCombat() {
        return "Combat on foot";
    }
}

И еще его реализует Сommander

public class Сommander implements Soldier {
private int sizeOfSubordinates = 10;
    @Override
    public String makeCombat() {
        return "Combat on foot and on transport";
    }
public int sizeOfSubordinates() {
        return sizeOfSubordinates ;
    }
}

Вопрос в следующем: какой смысл в интерфейсе, если я не смогу вызвать sizeOfSubordinates() если переменная будет типа Soldier commander = new Commander(); Чтобы можно было его использовать, нужно писать Commander commander = new Commander(); Но в таком случае отсутствует полиморфизм и т.д.

Более обобщенно, какой подход использовать, когда у классов есть и общие методы и уникальные для некоторых из классов. Если мне нужны методы не входящие в общий интерфейс, то мне создавать переменную конкретного класса, обходя интерфейс?

Answer 1

Можно сделать 2 интерфейса, Soldier и Officer, Soldier содержит метод makeCombat(), Officer наследует Soldier и содержит метод sizeOfSubordinates(). Таким образом, там где Вам требуется работать с офицерами (командирами, у которых есть подчиненный состав), Вы используете интерфейс Officer, а там где Вам нужен весь личный состав, используете интерфейс Soldier.

READ ALSO
Получить значение

Получить значение

Помогите в решении проблемыЕсть класс

102
Автозамена на спецсимволы

Автозамена на спецсимволы

Есть небольшое веб приложение для обмена сообщениями, вроде форума

114
проверка полей Рефлексия Java

проверка полей Рефлексия Java

Задам мб глупый вопрос, но все же как проверить поля с помощью рефлексии и если поля написаны не правильно либо пустые выбрасывало исключения

119
Не работает корректно замена символов в задачке на шифрование с обратным алфавитом

Не работает корректно замена символов в задачке на шифрование с обратным алфавитом

Имеется задача на шифрование, где каждый из входящих в строку символов английского алфавита надо заменить на его "зеркальный", те

102