2017-09-08 30 views
0

我有這樣的代碼,例如,我有一個超級抽象類動物和一個抽象的子類鳥,和一個鳥AmericanRobin的子類,我想填充數據在美國羅賓創建從動物的對象鳥,但我不知道該怎麼做,因爲我想創建另一個名爲國內金絲雀的小類,並將其構造函數的值傳遞給他的超類構造函數來創建一個對象,任何建議?從java中的子類的子類傳遞值

public abstract class Animal {// SuperClass animal 

    private String Kind,Appearance; 

    Animal(String Kind,String Appearance) { 
     this.Kind = Kind; 
     this.Appearance = Appearance; 
    } 

    public abstract void eat(); 
    public abstract void move(); 

    @Override public String toString() { 
     return "("+Kind+","+Appearance+")"; 
    } 

    public abstract class Bird extends Animal {//SubClass of superClass Animal 

     Bird(String Kind, String Appearance) { 
      super(Kind, Appearance); 
     } 

     @Override public void eat() { 

      System.out.println("Eats seeds and insects"); 
     } 

     @Override public void move() { 
      System.out.println("Flies throught the air"); 
     } 
    } 

    public abstract class Fish extends Animal{//SubClass of SuperClass Animal 

     Fish(String Kind, String Appearance){ 
      super(Kind,Appearance); 
     } 

     @Override public void eat() { 
      System.out.println("Eats krill, algae and insects"); 
     } 

     @Override public void move() { 
      System.out.println("Swims throught the water"); 
     } 
    } 

    //== Here the pain begins == 
    public class AmericanRobin extends Bird { 

     AmericanRobin(String Kind, String Appearance) { 
      super(Kind, Appearance); 
     }    
    } 

    public class DomesticCanary extends Bird{ 

     DomesticCanary(String Kind, String Appearance) { 
      super(Kind, Appearance); 

     } 
    } 
} 
+0

請告訴我不是爲你工作,請解釋。你會得到什麼樣的錯誤,或者預期什麼與實際產出有關。 – nullpointer

+0

創建和鳥類一樣多的類是一種矯枉過正。你應該創建'動物americancan =新鳥(「美國金絲雀」,「可能是褐色」)和'動物domesticcan =新鳥(「國內金絲雀」,「非常豐富多彩」)等等......如果需要添加另一個數據成員/變量說'genus'可能是(旁邊'kind'和'外觀') – kaza

+0

以及這是一個練習我有一個抽象的主要類和其他抽象類父親的動物,動物 - >鳥類和魚類 - >鳥類和魚類。 動物層次的Model部分通過聲明動物,鳥,魚, 旅鶇,DomesticCanary,RainbowTrout和SockeyeSalmon 類: –

回答

0
  1. 請重新命名變量從類名稱區分開。 kindappearance是更好的名字。

  2. 要測試你的繼承結構,嘗試創建子類的實例,並調用它繼承,你的情況的方法:

    AmericanRobin americanRobin = new AmericanRobin("kind","appearance"); 
    System.out.println(americanRobin.toString()); // inherited from Animal 
    
+0

看我理解,但邏輯是這樣的......我有一個主要的抽象類召喚獸2字符串的種類和appareance,然後我有另一個抽象類叫鳥和魚,最後物種類叫美國知更鳥和國內金絲雀這有和empy值在他們的構造者的想法是通過這些argumenes像這樣的聲明: SockeyeSalmon公開,擴展了Fish,並聲明瞭一個公開的構造函數,它將超級構造函數的「sockeyesalmon」和「bright 紅色帶有綠色的頭」。 這是繼承 –

+0

的鍛鍊,兒子類SockeyeSalmon他的構造函數傳遞他的論點給他的父魚構造(魚pases動物)和我使用getKind和apareance字符串值要做到這一點在這個例子中 公共類SockeyeSalmon擴展SockeyeSalmon(String Kind,String Appearance){ \t \t \t super(Kind,Appearance); \t \t} \t \t \t 公共\t字符串getKind(){ \t \t \t返回 「SockeyeSalmon」; \t \t} \t \t \t 公共\t字符串getAppearance(){ \t \t \t返回 「描述」; \t \t} \t} –