Как правильно реализовать функцию move() в этом объектно-ориентированном коде Java?

#java #oop #superclass

Вопрос:

Я собираюсь попробовать это еще раз. Мне нужна помощь. Очевидно, я сделал что-то не так со своим кодом. Я попытался обратиться сюда за помощью, но мой вопрос был закрыт, и мне сказали перейти на проверку кода. Я разместил свой вопрос на их сайте, и они отказываются помогать, потому что говорят, что я не следую инструкциям по проблеме, которую мне дали. Я не знаю, что я делаю не так, и если никто не хочет помочь, как я должен учиться? Итак, я снова возвращаюсь к вопросу, отредактированному так, чтобы, надеюсь, на этот раз он пройдет.

Мне была поставлена следующая задача:

Вы вернулись во времени в Афины 500 г. до н. э., и Сократ хочет, чтобы вы создали для него приложение, которое поможет классифицировать животных.

  1. Создайте классы «Животное», «Кошка» и «Ошибка».
  2. Определите свойства «цвет» и «порядковый номер» для соответствующих и необходимых классов. Пусть они будут инициализированы в конструкторе.
  3. Добавьте функциональность, которая позволила бы нам вызывать метод «перемещение» с классами Cat и Bug. Пусть метод вернет строку «Я двигаюсь с» номер ноги » ноги!», при этом «номер ноги» будет номером ноги, как указано в классе.
  4. Добавьте новый класс под названием Bird. Добавьте свойство «номер крыла». Добавьте функциональность, которая позволила бы нам вызывать метод «перемещение» с классом Bird. Пусть метод вернет строку «Я двигаюсь с» номер ноги » ноги!», если номер крыла не имеет применимого значения. Если wing_number имеет применимое значение, верните строку «Я лечу».

Мой код для этого выглядит следующим образом:

 public class SocratesApp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat myCat = new Cat("orange", 4);
        int catLegs = myCat.leg_number;
        myCat.move(catLegs);
    
        Bug myBug = new Bug("green", 16);
        int bugLegs = myBug.leg_number;
        myBug.move(bugLegs);
    
        Bird bird1 = new Bird("yellow", 2, 2);
        int bird1Legs = bird1.leg_number;
        int bird1Wings = bird1.wing_number;
        bird1.move(bird1Legs, bird1Wings);
    
        Bird bird2 = new Bird("brown", 2, 0);
        int bird2Legs = bird2.leg_number;
        int bird2Wings = bird2.wing_number;
        bird1.move(bird2Legs, bird2Wings);

    }

}

class Animal {

    private String color;
    private int leg_number;

    public Animal(String color, int leg_number) {
        this.color = color;
        this.leg_number = leg_number;
    }

    public void move(int leg_number) {
        System.out.println("I'm moving with "   leg_number   " legs!");
    }
}

class Cat extends Animal {
    String color;
    int leg_number;

    public Cat(String color, int leg_number) {
        super(color, leg_number);
        this.color = color;
        this.leg_number = leg_number;
    }

    @Override
    public void move(int leg_number) {
        System.out.println("I'm moving with "   leg_number   " legs!");
    }
}

class Bug extends Animal {
    String color;
    int leg_number;

    public Bug(String color, int leg_number) {
        super(color, leg_number);
        this.color = color;
        this.leg_number = leg_number;
    }

    @Override
    public void move(int leg_number) {
        System.out.println("I'm moving with "   leg_number   " legs!");
    }
}

class Bird extends Animal {
    String color;
    int leg_number;
    int wing_number;

    public Bird(String color, int leg_number, int wing_number) {
        super(color, leg_number);
        this.color = color;
        this.leg_number = leg_number;
        this.wing_number = wing_number;
    }

    public void move(int leg_number, int wing_number) {
        if (wing_number > 0) {
            System.out.println("I'm flying");
        } else {
            System.out.println("I'm moving with "   leg_number   " legs!");
        }
    }
}
 

Кто-то сказал мне, что я не применяю метод move (), как того требуют инструкции, но они не скажут мне, что я делаю неправильно. Наверное, я не понял инструкций. Мне нужен кто-то, кто скажет мне, что я делаю неправильно и как это исправить. Это ОЧЕНЬ ВАЖНО. Кто-нибудь, пожалуйста, помогите мне с этим?

Комментарии:

1. Я не думаю, что вы действительно хотите передавать количество ног move() методу: кошка не будет двигаться с 89 ногами, но ваш метод в настоящее время позволяет это. Удалите параметр и используйте значение leg_number поля.

2. Я вижу, что в проблеме есть ошибка, так как я ее скопировал. Должно быть, это связано с тем, что в проблеме используются знаки «больше» и «меньше». Я исправлю это.

3. Да, вам было сказано перейти на проверку кода , потому что этот обмен предназначен для неработающего кода. Обзор кода предназначен для рабочего кода, которому нужны мнения о том, как его можно улучшить. Если ваш код не работает, подробно объясните, в чем заключается ошибка, с которой вы столкнулись, каково ожидаемое поведение, что он делает/не делает. Нам не нужен весь текст задания.

4. Что ж, похоже, что никто из совета директоров не собирается мне помогать, так что, думаю, я просто облажался.

5. Каждый объект знает, сколько у него ног, поэтому, как уже говорилось, move метод вообще не должен иметь такого параметра. Просто создайте public void move() метод. Поскольку ваш Animal класс уже объявляет a private String color; и private int leg_number; поле, подклассам нет необходимости объявлять их снова. Они уже наследуют поля, просто сделайте их protected вместо private , чтобы подклассы могли получить к ним доступ.