2015-11-08 71 views
0

我在這個世界很新,並且正在學習如何通過嘗試做朋友發給我的練習來編碼,但是我遇到了問題,確切知道它是什麼。繼承,polymorfism,接口,Java編碼excercises

主題是繼承,多態,我應該有這3只動物,給他們食物(魚,肉,垃圾)接口

,如果他們喜歡與否,他們會回答。

這是我的 「小鯊魚」 的子類

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

我要避免,因爲你接近,這將是更好的去解決它自己編寫確切的代碼...

giveFood()是屬於每個動物,就像一個的toString方法()和hablar()。所以你需要在每種情況下調用它,就像其他兩個函數一樣。

在程序開始時,當您提示輸入動物類型後,您應該提示「您想要給予什麼類型的食物?」 (使用nextLine()代替nextInt())。將該輸入保存在名爲「food」的字符串變量中。

然後在每一種情況下你要打印出giveFood()的結果,通過在食品變量:

System.out.println(gat.giveFood(food)); 

對於「小鯊魚」的類型,如果你輸入「魚」的提示時,你所期望爲了食物,他將回答「nom nom」。如果你回覆別的東西,他會說:「我不喜歡它」。

您可以在此停止閱讀,只是讓您的代碼如上所述工作,但您可能希望進一步嘗試學習。 3種情況的設置方式,並沒有真正利用繼承/多態。

多態性的一點是,你可以讓對象具有不同的「內在的膽量」,但在外部對待它們是相同的,因爲它們的公共接口是相同的。爲了更好地說明這一點,您希望您的代碼創建一個單個動物對象變量。您的案例陳述然後將變量初始化爲三種類型之一。隨後的情況後,就可以調用對象的三種方法,輸出將根據類型不同:

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

@model_dialog I'm真的很感謝你的建議,我走向完成excersice又邁進了一步。非常感謝! –