2016-05-15 4 views
0

上記の基本的な概念を使ってコードを修正するのに役立つ必要があります。混乱を避けるために、私はここで指示のスクリーンショットを取った:https://imgur.com/SdiotUi私はコンストラクタを作成し、ブール値と文字列を返す助けが必要です

しかし、私は私のコードを実行すると動作しません。私は多くの間違いがあることを知っていますが、私はこれを行うために正しい方法を尋ねて過去数時間を過ごしたにもかかわらず、それらを修正することに問題があります。

最初のコンストラクタを作成するときに、名前と脚を正しく割り当てているかどうかわかりません。 "true"を返すのに問題があります。親クラスを1つの引数で呼び出すときにエラーが発生します。私は抽象クラスを正しくオーバーライドしていると思う。

マイコード:あなたの方法のいくつかは、クラスとして宣言されているよう

public class Animal1 { 

    private String animalName; 
    public int numberOfLegs; 
    public Animal1(String name){ 
     name = animalName; 
     name = "John"; 
    } 
    public Animal1(String name, int legs){ 
     name = animalName; 
     legs = numberOfLegs; 
     name = "Jack"; 
     legs = 4; 
    } 

    public String getName(){ 
     return animalName; 
    } 

    public int getLegs(){ 
     return numberOfLegs; 
    } 

    public void isAMammal(){ 
     return true; 
    } 

    public void isCarnivorous(){ 
     return true; 
    } 

    public abstract class getHello{ 

    } 
} 

public class Cat1 extends Animal1{ 

    public Cat1(String name){ 
     Animal1.name; 
    } 

    public abstract class getHello{ 
     return "Meow"; 
    } 
} 

public class Dog1 extends Animal1{ 

    public Dog1(String name){ 
     Animal1.name; 
    } 

    public abstract class getHello{ 
     return "Woof"; 
    } 
} 
+3

うーん...あなたの方法のいくつかは、クラスとして宣言されています。いくつかの適切なメソッドは、何かを返すときにvoid戻り値として宣言されます(booleanなど)。スーパーコンストラクタsuper(name);を呼び出す代わりに、Animal1.nameに静的な方法でアクセスしようとしています。私はいくつか私は逃したと確信しています。 – CConard96

+0

欠落している数を指摘するために、変数のパラメータに代入しようとしています。あなたの教授がクラス名を承認しないと確信しています。また、Cat1のコンストラクタは使用されていないようです。 – venkatKA

答えて

0
public abstract class Animal1 { // If you want to have an abstract method, declare the class as abstract 

    private final String animalName; 
    private final int numberOfLegs; // better of using private and make it final since it's not going to change. 

    public Animal1(final String name, final int legs){ //better making the input parameters final since they are not supposed to be changed 
     //name = animalName; 
     //legs = numberOfLegs;//it assigned the field to an input parameter. that will take no effect on the object created. 
     animalName = name; 
     numberOfLegs = legs; 
    } 

    public String getName(){ 
     return animalName; 
    } 

    public int getLegs(){ 
     return numberOfLegs; 
    } 

    public boolean isAnimal(){ //boolean function needs a return type too!! 
     return true; 
    } 

    public boolean isCarnivorous(){ 
     return true; 
    } 

    public abstract String getHello(); // an abstract method has same requirement as a normal method besides the abstract modifier. it will need a return type. And it ends with a semicolon 

} 

public class Cat1 extends Animal1{ 

    public Cat1(final String name){ 
     super(name, 4); //use super to call parent constructor 
    } 

    @Override 
    public String getHello(){ 
     return "Meow"; 
    } 
} 

public class Dog1 extends Animal1{ 

    public Dog1(final String name){ 
     super(name, 4); 
    } 

    @Override 
    public String getHello(){ 
     return "Woof"; 
    } 
} 
0

まず、それが見えます。私はそれらを抽象メソッドにしたいと思っています。それらを変更する必要があります。

public abstract String getHello(); 

抽象メソッドは抽象クラスでのみ宣言できます。したがって、Animal1を抽象として再定義する必要があります。あなたはそれが自動的にこのメソッドを生成するために提供するEclipseのようなIDEを使用している場合

public abstract class Animal1 

次に、あなたが抽象メソッドを実装するとき、あなたは

public String getHello() 

として定義します。

最後に、Cat1などの子クラスでコンストラクタを使用する場合、静的変数で、Animal1に既に設定したコンストラクタをバイパスするように "name"を設定しようとしています。これを修正する最善の方法は、Cat1とDog1のコンストラクタをスーパーコンストラクタを呼び出すように変更することです。

public Cat1(String name){ 
    super(name); 
} 
+0

Animal1のgetHelloメソッドを「public abstract String getHello()」に変更し、拡張可能であることを示すためにAnimal1クラスを変更します。私の提案は、提供される指示に従います。 – CConard96

+0

私はあなたのコードを私の提案でテストしただけで、ブール値でなければならないときにvoidを返す2つのメソッドを除いて、うまくいきます。クラスの後に各クラスをそれぞれのファイル名で入れてもよろしいですか?例:Animal1.javaのAnimal1? – CConard96

関連する問題