Как использовать класс в качестве объекта, а затем использовать два метода для тестирования кода?

#java #arrays #inheritance #interface #polymorphism

Вопрос:

Я все еще очень новичок, когда дело доходит до программирования на java, поэтому, хотя это кажется очень простой проблемой, я просто ни за что на свете не могу понять, как ее решить. Поэтому изначально у меня есть этот код с таким интерфейсом:

 public interface Animal {
    public String getSound();
    public String getType();
}
 

Затем классы, которые определяют звук и тип животного, такие как:

 public class Cow implements Animal{
    String color;
    public Cow(String c) {
        color = c;
    }
    public String getSound() {
        return "moo";
    }
    public String getType() {
        return "cow";
    }
    public String getColor() {
        return color;
    }
}
 

А затем у меня есть класс, который собирает всю информацию воедино и распечатывает ее:

 public class OldMacDonaldApp {
    public static void main(String[] args) {
        Animal c;
        c = new Cow("brown");
        System.out.println("The "   ((Cow) c).getColor()   " "  c.getType()   " goes "   c.getSound());
        
        c = new Chick(3);
        System.out.println("The "   ((Chick) c).getAge()   " days old "   c.getType()   " goes "   c.getSound());
        
        c = new Sheep("fluffy");
        System.out.println("The "   ((Sheep) c).getTrait1()   " "   c.getType()   " goes "   c.getSound());
        
        c = new Dog("loyal");
        System.out.println("The "   ((Dog) c).getTrait2()   " "   c.getType()   " goes "   c.getSound());
    }
}
 

Но затем мне пришлось создать этот новый класс фермы, который использует массивы для тестирования всех животных:

 import java.util.*;
public class Farm{
    private ArrayList <Animal> myFarm;
    public Farm() {
        myFarm = new ArrayList <Animal>();
    }
    public void addAnimal(Animal animal) {
        myFarm.add(animal);
    }
    public void animalSounds() {
        Animal a;
        for (int i=0; i < myFarm.size(); i  ) {
            a = myFarm.get(i);
            System.out.println(a.getType()   " goes "   a.getSound());
        }
    }
}
 

Теперь мне нужно изменить код класса OldMacDonaldApp, чтобы я мог создать ферму объектов и использовать методы addAnimal и animalSounds. Я знаю, что это, вероятно, действительно просто, и я, вероятно, упускаю что-то действительно очевидное, но я не могу понять, что делать. Любая возможная помощь будет весьма признательна.

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

1. Таким образом, вы знаете, как создать экземпляр класса, потому что вы уже делаете это с (например) Cow . Вот как вы создаете свой Farm . Затем вы вызываете методы на своем экземпляре фермы так же, как вы уже вызываете их на своих экземплярах животных.

Ответ №1:

Теперь Farm класс выполняет всю работу, поэтому мы можем просто создавать и добавлять животных с addAnimal(...) помощью метода, а затем использовать animalSounds() метод для их распечатки:

 public class OldMacDonaldApp {
    public static void main(String[] args) {
        //Create the farm object the same way as creating a new animal
        Farm myFarm = new Farm();

        //Add animals to the farm using the addAnimal method of the Farm
        myfarm.addAnimal(new Cow("brown"));
        myfarm.addAnimal(new Chick(3));
        myfarm.addAnimal(new Sheep("fluffy"));
        myfarm.addAnimal(new Dog("loyal"));

        //Now print the sounds with the animalSounds method in the Farm class
        myfarm.animalSounds();
    }
}