Допустим есть интерфейс 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(); Но в таком случае отсутствует полиморфизм и т.д.
Более обобщенно, какой подход использовать, когда у классов есть и общие методы и уникальные для некоторых из классов. Если мне нужны методы не входящие в общий интерфейс, то мне создавать переменную конкретного класса, обходя интерфейс?
Можно сделать 2 интерфейса, Soldier и Officer, Soldier содержит метод makeCombat(), Officer наследует Soldier и содержит метод sizeOfSubordinates(). Таким образом, там где Вам требуется работать с офицерами (командирами, у которых есть подчиненный состав), Вы используете интерфейс Officer, а там где Вам нужен весь личный состав, используете интерфейс Soldier.
Продвижение своими сайтами как стратегия роста и независимости