#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();
}
}