Ответы пользователя по тегу ООП
  • Java. Абстракции, интерфейсы, наследования. Как реализовать?

    @nagibator8000
    Я бы использовал композицию, а не наследование. Создал бы интерфейс Action и от него класс JumpAction. Потом интерфейс Human с одним методом doAction, который бы принимал Action. А уже дальше на основе Human создал классы Man и Woman и реализовывал уникальную логику для каждого класса.

    UPD. набросал код
    public static interface Action {
            void apply(int power);
            String getActionName();
        }
    
        public static class JumpAction implements Action {
    
            private int gravity;
    
            public JumpAction(int gravity) {
                this.gravity = gravity;
            }
    
            @Override
            public void apply(int power) {
                if (power > gravity) {
                    System.out.println("прыгает на " + (power - gravity) + " метров...");
                } else {
                    System.out.println("немогу подпрыгнуть...");
                }
            }
    
            @Override
            public String getActionName() {
                return "прыжок";
            }
        }
    
        public static interface Human {
            void doAction(Action action);
        }
    
        public static class Man implements Human {
    
            public String name;
            private int power = 10;
    
            public Man(String name) {
                this.name = name;
            }
    
            @Override
            public void doAction(Action action) {
                System.out.println(name + " делает " + action.getActionName());
                action.apply(power);
            }
        }
    
        public static class Woman implements Human {
            public String name;
            private int power = 7;
    
            public Woman(String name) {
                this.name = name;
            }
    
            @Override
            public void doAction(Action action) {
                System.out.println(name + " вертя задницей делает " + action.getActionName());
                action.apply(power);
            }
        }
    
        public static void main(String[] args) {
            JumpAction jump = new JumpAction(8);
            Man man = new Man("Анатолий");
            man.doAction(jump);
            Woman woman = new Woman("Наталья");
            woman.doAction(jump);
        }

    Выдаст
    Анатолий делает прыжок
    прыгает на 2 метров...
    Наталья вертя задницей делает прыжок
    немогу подпрыгнуть...
    Ответ написан
    2 комментария