我在这个世界上相当新鲜,并且我通过尝试做朋友发送给我的练习来学习如何制作代码,但我遇到了问题,而且我不知道究竟是什么它是。
主题是继承,多态和接口
我应该吃这3只动物并给它们食物(鱼,肉,垃圾),如果他们愿意,他们会回答。
这是我的" Gato"子类
package Animal; public class Gato implements Animal {
String nombre;
public Gato() {
this.nombre = "Missi";
}
public Gato(String nombre) {
this.nombre = nombre;
}
@Override
public String hablar() {
return "Miauuuuu";
}
@Override
public String giveFood(String food) {
if(alimento.equals("fish")) {
return "ñam ñam"; }else{
return "i dont like it";
}
}
public String toString(){ return "Soy un Gato y me llaman "+ nombre; }
}
这是我的界面
package Animal; public interface Animal {
String DEFINICION = "Ser orgánico que vive, siente y se mueve por propio impulso";
public String hablar();
public String giveFood(String alimento); }
这是我的主要
Public class Main {
static Scanner entrada = new Scanner (System.in).useLocale (Locale.US);
public static void main(String[] args) {
int operacion;
boolean salir = false;
// CREAR OBJETOS
Gato gat = new Gato();
Perro per = new Perro();
Tigre tig = new Tigre();
while (!salir) {
System.out.println("\nElige el tipo de animal: ");
System.out.println(" 1 - Perro / 2 - Gato / 3 - Tigre " + " / 4 - Salir");
// Permite capturar lo que se escribe por teclado y lo deja en la
// variable operación.
operacion = entrada.nextInt();
switch (operacion) {
case 1:
System.out.println(per.toString());
System.out.println(per.hablar());
System.out.println(giveFood(per));
break;
case 2:
System.out.println(gat.toString());
System.out.println(gat.hablar());
System.out.println(giveFood(gat));
break;
case 3:
System.out.println(tig.toString());
System.out.println(tig.hablar());
System.out.println(giveFood(tig));
break;
case 4:
System.out.println("Bye bye");
salir = true;
break;
default:
System.out.println("Seleccione otra operación");
}
}
}
public static String darDeComer(Animal ani) {
boolean salir = false;
while (!salir) {
System.out.println("What do we give them? ");
System.out.println(" 1 - fish / 2 - meat / 3 - garbage " + " / 4 - Salir");
int comida = entrada.nextInt();
switch (comida) {
case 1:
System.out.println(giveFood(ani));
break;
case 2:
break;
case 3:
break;
case 4:
salir = true;
break;
}
return "";
}
}
}
那我该怎么办?我无法从我的子类中得到答案,而且我也不知道如何给动物"具体"食物"获得和具体答案。
答案 0 :(得分:0)
我将避免编写确切的代码,因为你很亲密,最好自己解决这个问题......
giveFood()是属于每个动物的方法,就像toString()和hablar()一样。所以你需要在每种情况下调用它,就像其他两个函数一样。
在你的程序开始时,在你提示动物类型之后,你应该接着提示“你想给什么类型的食物?” (对该输入使用nextLine()而不是nextInt())。将该输入保存在名为“food”的字符串变量中。
然后在每种情况下,你打印出feedFood()的结果,传入食物变量:
System.out.println(gat.giveFood(food));
对于“gato”类型,如果您在提示食物时键入“fish”,他会回复“nom nom”。如果你回答任何其他问题,他会说:“我不喜欢它。”
你可以在这一点上停止阅读,让你的代码按照上面的描述运行,但是你可能希望在你学习之后再进一步。上面设置3个案例的方式,它并没有真正利用继承/多态。
多态性的一点是,你可以让对象具有不同的“内幕”,但在外部对待它们是因为它们的公共接口是相同的。为了更好地说明这一点,您希望代码创建单个动物对象变量。然后,您的case语句将该变量初始化为三种类型之一。然后在这个案例之后,你可以在对象上调用三个方法,输出将根据类型而不同:
Animal someAnimal;
switch (operacion) {
case 1:
someAnimal = new Perro();
break;
case 2:
someAnimal = new Gato();
break;
case 3:
someAnimal = new Tigre();
break;
}
System.out.println(someAnimal.toString());
System.out.println(someAnimal.hablar());
System.out.println(someAnimal.giveFood(food));