继承,多态性,接口,Java编码练习



我对这个世界很陌生,我正在学习如何通过做朋友发给我的练习来制作代码,但我有一个问题,我不知道它到底是什么。

主题是继承、多态性和接口

我应该有这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 "";
        }
    }
}

那么我该怎么做呢?我无法从我的子类中得到答案,我也不知道如何给"动物"特定的"食物"来获得特定的答案。

我将避免编写确切的代码,因为你离得很近,最好自己解决。。。

giveFood()是一个属于每种动物的方法,就像toString()和hablar()一样。所以你需要在每种情况下调用它,就像其他两个函数一样。

在程序开始时,在你提示动物类型后,你应该下一步提示"你想给什么类型的食物?"(使用nextLine()代替nextInt()输入)。将输入保存在一个名为"food"的字符串变量中。

然后,在每种情况下,您都打印出giveFood()的结果,并传入食物变量:

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));

最新更新