2016-04-13 23 views
1

から抽象クラスにコールバックする方法は、抽象クラスを拡張し、使用されている宿題とページのタイプをリストアップするクラスを作成する必要があります。しかし、私は完全に理解していない読み込みページと宿題の種類に戻っても、createAssignmentを使用して正しく作成する方法を理解していません。これは私がこれまで行ってきたことですが、動作していないようです。どんな助けもありがとうございます。構文の修正と再フォーマット拡張クラス

public abstract class Homework 
{ 
    public abstract int pagesRead(); 
    public abstract String typeHomework(); 
    public abstract void createAssignment(int p); 
} 

public class MyMath extends Homework 
{ 
    public abstract void createAssignment(int p, String t) 
    { 
     p = 5; 
     t = "Math"; 
    } 

} 
+0

javaは大文字と小文字が区別されます大文字と小文字を区別して抽象クラス名を作成してみてください –

+0

まず、MyMathのメソッドシグネチャから 'abstract'を削除してください。 – NAIT

+0

このコードはコンパイルされません。 '' createAssignment''のメソッドシグネチャを見てください。また、スーパークラスのパラメータをオーバーライドしません(2つのパラメータ)。また、スーパークラスのすべてのメソッドは抽象クラスなので、すべてをサブクラスに実装する必要があります。 – f1sh

答えて

0

それは非常に単純バディです:私が見ることができるように私はあなたがフィールドをpopulteする方法を使用しようとしていることを推測し、

public class MyMath extends Homework { 
    public int pagesRead(){ 
     return 3; // any number that you want 
    } 

    public String typeHomework(){ 
     return "My math homework"; // any text for the homework 
    } 

    public void createAssignment(int p){ 
     // do anything with p 
    } 
} 

:あなたは抽象メソッドを実装する必要があります。まず、

値:

public class MyMath extends Homework { 

    private int p; 
    private String homeworkContent; 

    public int pagesRead(){ 
     return p; 
    } 

    public String typeHomework(){ 
     return homeworkContent; // any text for the homework 
    } 

    public void createAssignment(int p, String homeworkContent){ 
     this.p = p; 
     this.homeworkContent = homeworkContent; 
    } 
} 

しかし、心に留めておくあなたが宿題から方法を変更する必要があります。

public abstract void createAssignment(int p, String homeworkContent); 
1

あなたのコードは:

public abstract class Homework 
{ 
    public abstract int pagesRead(); 
    public abstract String typeHomework(); 
    public abstract void createAssignment(int p, String t); 
} 

public class MyMath extends Homework 
{ 
    public void createAssignment(int p, String t) 
    { 
     p = 5; 
     t = "Math"; 
    } 
} 

あなたは同様に他の二つの抽象メソッドを実装する必要があります。

そして、メソッドの引数に割り当てるのは意味がありません:-)私はMyMathインスタンスの変数に割り当てたいと思います。

私はそれをテストしていません。助けてくれますか?

+0

はい!私は実際にそれを見つけ出し、あなたがそれを投稿したときにあなたと非常に似ている私自身の答えを投稿しました。お手伝いありがとう。 –

0

両方のプログラムを抽象化して、どちらも抽象化されていないので、createAssignmentは無効になりました。これは今動作します。フォーマットポインターの皆様、ありがとう。

public abstract class Homework 
{ 
public abstract int pagesRead(); 
public abstract String typeHomework(); 
public abstract void createAssignment(int p); 

}

public abstract class MyMath extends Homework 
{ 
public void createAssignment(int p, String t) 
{ 
    p = 5; 
    t = "Math"; 
} 

}

+1

'createAssignment'の署名が一致しません。 – totoro

+0

これは '' MyMath''抽象を作成しただけで動作します。 '' createAssignment'ではなく、どのメソッドもオーバーライドしません。 – f1sh

1

あなたは明確にあなたの最後の質問と、このいずれかを考慮抽象的な概念を理解していません。あなたはHomeworkクラスにpublic abstract void createAssignment(int p);を定義し

は、あなたが「このメソッドを実装する必要があり、このクラスを拡張する任意の具象クラスは、(抽象的でない読み)」と言ったが、具体的なクラスに再度使用して同じメソッドを実装しようとしています abstractキーワードは、違うシグネチャでのみ表示されます。

どちらかabstractキーワードを削除し、署名を変更します。

public void createAssignment(int p, String t) { 
    p = 5; 
    t = "Math"; 
    } 

または抽象メソッドを実装:あなたはあなたが定義されているすべての抽象メソッドを実装する必要がありますそれにもかかわらず

@Override 
    public void createAssignment(int p) { 

    } 

に注意してくださいをMyMathを抽象的にしない限り、Homeworkにあります。これは、単にオーバーロードした場合はcreateAssignment(int p)を「もう一度」実装するとカウントします。