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

时间:2015-11-08 04:41:04

标签: java inheritance interface polymorphism

我在这个世界上相当新鲜,并且我通过尝试做朋友发送给我的练习来学习如何制作代码,但我遇到了问题,而且我不知道究竟是什么它是。

主题是继承,多态和接口

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

    }
}

那我该怎么办?我无法从我的子类中得到答案,而且我也不知道如何给动物"具体"食物"获得和具体答案。

1 个答案:

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