2017-09-08 3 views
0

私はこのコードを持っています。私はスーパー抽象クラスの動物と抽象サブクラスの鳥を持っています。そして、AmericanRobinのサブクラスです。私はアメリカのロビンでデータを埋めて動物からの鳥の鳥ですが、私はそれを行う方法がわかりません。私はDomestic canaryと呼ばれる別のサブクラスの鳥を作成し、そのコンストラクタの値をスーパークラスのコンストラクタに渡して、オブジェクトを作成します。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

鳥類と同数のクラスを作成することは過度のことです。 Animal americanCan = new Bird( "アメリカンカナリア"、 "ブラウンシング") "と" Animal domesticCan = new Bird( "カラフルなカナル"、 "非常にカラフルな")などを作成する必要があります。データメンバ/変数は '属 'が(kindと' appearance'と並んで) – kaza

+0

であるかもしれないと言っています。これは私が抽象的なメインクラスと他の抽象クラスの動物、動物 - >鳥と魚 - 鳥や魚の種。動物、鳥、魚を宣言することによって、動物の階層の モデルの一部、 コマツグミ、DomesticCanary、RainbowTrout、およびSockeyeSalmon クラス:私は理解し –

答えて

0
  1. クラス名と区別するために、変数の名前を変更してください。 kindappearanceはより良い名前です。

  2. は、あなたの継承構造をテストするサブクラスのインスタンスを作成してみてください、それはあなたのケースでは、継承メソッドを呼び出すには:

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

表情が、ロジックはこれです...私は2とメイン抽象クラスのコール動物を持っています文字列の種類とappareance、私は別の抽象クラスの鳥や魚と最後にアメリカのロビンと国内のカナリーと呼ばれているこれらのargumenesをこのコンセプトのようにこれらのargumenesを渡すことですempy値と呼ばれる種クラス: SockeyeSalmon is public Fishを継承し、公開された "sockeyesalmon"と "bright 赤い緑の頭部"をそのスーパークラスコンストラクタに渡す無意味なコンストラクタを宣言します。 これは、継承 –

+0

の行使は、その息子のクラスSockeyeSalmonは、(魚を動物にpases)彼のスーパーの魚のコンストラクタに彼のコンストラクタによって彼の引数を渡すと私は思い パブリッククラスSockeyeSalmonが延び、この例では、これを行うためにgetKindとapareance文字列値を使用します魚{ \t \t SockeyeSalmon(文字種類、文字列の出現){ \t \t \tスーパー(種類、外観)。 \t \t} \t \t \t \tパブリックストリングgetKind(){ \t \t \t戻る "SockeyeSalmon"。 \t \t} \t \t \t \tパブリックストリングgetAppearance(){ \t \t \tリターン "説明"。 \t \t} \t} –

関連する問題