2017-02-07 11 views
-4

私はHawkのようないくつかの種によって継承されている抽象クラスAnimalを構築したいと思います。私は次のようでした:Java抽象クラス

abstract public class Animal { 

     private String name; 
     abstract String sound(); 
     abstract String movement(); 
     public void set_name(String s){ 
     name=s; 
     } 
     public String get_name(){ 
     return name; 
     } 
    } 
    public Hawk extends Animal{ 
     public String sound(){ 
     return "Shriek" ; 
     } 
     public String movement(){ 
     return "Fly" ; 
     } 

をしかし、コンパイラは、メソッドの音()および動物で見られる動き()、なぜこれが起こるかを複製する私に言って続けて?私はこれを実装しようとしています。

+0

私はコードを誤読していますか?「動物」の中に 'Hawk'がネストされていますか?また、警告またはエラーメッセージ? – AntonH

+0

'@ Override'を使う – nullpointer

+2

' Hawk'の前に 'class'がありません。 –

答えて

3

変更:

public Hawk extends Animal 

class Hawk extends Animal 

には、あなただけの.javaファイル内の1つのパブリッククラスを持つことができます。プラスあなたは "クラス"キーワードを忘れてしまった。

+0

素晴らしい!もしそうなら、私の答えを受け入れてください。 – JustinKSU

2

コードに2つの修正を加える必要があります。 1-

ホーク

はクラスであるので、同一の.javaファイルであることができないpublic class Hawk extends Animal

2-

2つのパブリッククラスとしてホークを宣言する。

次のように、正しいコードは次のとおりです。 -

abstract class Animal { 
     private String name; 
     abstract String sound(); 
     abstract String movement(); 
     public void set_name(String s){ 
     name=s; 
     } 
     public String get_name(){ 
     return name; 
     } 
    } 

    public class Hawk extends Animal{ 
     public String sound(){ 
     return "Shriek" ; 
     } 
     public String movement(){ 
     return "Fly" ; 
     } 
    } 
+0

このような内部クラスとして宣言された場合、 'Hawk'が存在できる唯一の方法は外側の' Animal'です - これはあなたが望むものではありません。その結合を避けるためにホークを静的にする必要があります – ControlAltDel

0

これはあなたのコードでなければなりません!一緒に2つの公立クラスはありません!

abstract class Animal { 
     private String name; 
     abstract String sound(); 
     abstract String movement(); 
     public void set_name(String s){ 
     name=s; 
     } 
     public String get_name(){ 
     return name; 
     } 
    } 

    public class Hawk extends Animal{ 
     @override 
     public String sound(){ 
     return "Shriek" ; 
     } 
     @override 
     public String movement(){ 
     return "Fly" ; 
     } 
    }