0

これは宿題の一部です。

いくつかのメソッドを持つclass名前付きを作成しようとしています。RomanNumeral最初のメソッドは、文字列がローマ数字RomanNumeralかどうかをチェックします。rn2 番目のメソッドは、ローマ数字を 10 進数値に変換します。私の問題は、残りの方法にあります。.equals().compareTo()およびのオーバーライド ファイルを作成するように求められますtoString()。私の質問は、どうすればこれをやり始めることができるでしょうか? オーバーライドするとはどういう意味ですか? 私は彼らが何をしているかを見て、それをエミュレートすることになっていますか? もしそうなら、 or を定義するメソッドはどこで見ることができます.compareTo()toString()?

役立つ場合は、現在のコードを投稿できます。

4

5 に答える 5

3

わかりました、私が見る限り、ここに 2 つの主な質問があります。

  1. メソッドをオーバーライドするとはどういう意味ですか?
  2. メソッドをオーバーライドするにはどうすればよいですか?

新しいクラスを考えましょう。そうすれば、私はあなたの宿題をしなくてすみます。

3 つの文字列を格納する Student というクラスがあります。

  • ファーストネーム
  • 苗字
  • GPA

このように見えるかもしれません。

public class Student {
    String firstName;
    String lastName;
    String gpa

    public Student(String firstName, String lastName, String gpa){
        this.firstName = firstName;
        this.lastName = lastName;
        this.gpa = gpa;
    }

    // Perhaps some methods here

    public String getIdentity(){
        return this.lastName + ", " + this.firstName;
    }
}

あなたは Student クラスを気に入っていますが、College の StudentId も追跡できればもっと良いと判断しました。1 つの解決策は、Student クラスを拡張することです。

クラスを拡張することで、Student が持っていたすべてのメソッド (およびコンストラクター) にアクセスできるようになり、独自のメソッドをいくつか追加できるようになります。それでは、新しいクラス CollegeStudent を呼び出して、studentId の文字列を追加してみましょう。

public class CollegeStudent extends Student{

    String studentId;

}

これで、追加作業なしで、CollegeStudent を作成し、その ID を取得できます。

// Code
CollegeStudent myCollegeStudent = new CollegeStudent("Dennis", "Ritchie", "2.2");
String identity = myCollegeStudent.getIdentity();
// Code

わかりました、十分なセットアップです。あなたの質問に答えましょう。

したがって、"Ritchie, Dennis" を返す代わりに、その大学生の "studentId" を返す getIdentity() を好むと仮定しましょう。その後、getIdentity メソッドをオーバーライドできます。

メソッドをオーバーライドすることで、getIdentity() を書き直して、studentId を返すようにします。CollegeStudent クラスは次のようになります。

public class CollegeStudent extends Student{

    String studentId;

    @Override
    public String getIdentity(){
        return this.studentId;
    }
}

メソッドをオーバーライドするには、同じタイプのオブジェクト (この例では String) を返す必要があり、同じパラメーターを受け入れる必要があります (この例ではパラメーターを受け入れませんでした)。

コンストラクターをオーバーライドすることもできます。

では、これはあなたの割り当てにどのように適用されますか? .equals()、.compareTo()、および .toString() は、拡張するクラス (Object など) のために既に定義されています。ただし、これらのメソッドを再定義またはオーバーライドして、クラスで役立つようにする必要があります。おそらく toString() の実装は、「IV」ではなく「4」という単語を返すでしょう。おそらくそうではありませんが、要点は、メソッドのコーディング方法を自由に決定できるようになったことです。

お役に立てれば。

于 2013-03-11T23:09:19.307 に答える
2

あるクラスが別のクラスを拡張すると、そのクラスはすべての非プライベートインスタンスメンバーを継承します。

たとえば、RomanNumeral extendsは Object、後者のメソッドを継承します。toString()これは、toString()任意のRomanNumeralインスタンスを呼び出すことができ、Object.toString()メソッドを呼び出すことを意味します。

ただし、継承した定義に優先する独自の定義を提供することにより、このメソッドをオーバーライドRomanNumeralすることを選択できます。次に、インスタンスを呼び出すと、定義したメソッドが呼び出されます。(これは、参照を介してインスタンスを参照している場合でも機能します。)toString()RomanNumeralRomanNumeralObject

したがって、このルーブリックを具体化するように求められています。

public class RomanNumeral {

    // ... your other methods ...

    @Override       // this line is optional
    public String toString() {
        // TODO define this method
    }

    @Override       // this line is optional
    public boolean equals(Object o) { // note: 'Object', *not* 'RomanNumeral'!
        // TODO define this method
    }

    @Override       // this line is optional
    public int hashCode() {
        // TODO define this method
    }

}

注意してください、あなたが言われたように見えても、「オーバーライドファイル」のようなものはありません。上記のメソッドはRomanNumeral.java、他のメソッドと同じように、内部で定義されています。

于 2013-03-11T22:02:37.243 に答える
0

ドキュメントから:
同じシグニチャ(名前に加えて、そのパラメータの数とタイプ)を持つサブクラスのインスタンスメソッドと、スーパークラスのインスタンスメソッドとしての戻り型は、スーパークラスのメソッドをオーバーライドします。

サブクラスがメソッドをオーバーライドする機能により、クラスは、動作が「十分に近い」スーパークラスから継承し、必要に応じて動作を変更できます。オーバーライドするメソッドは、オーバーライドするメソッドと同じ名前、パラメーターの数とタイプ、および戻り値のタイプを持ちます。

@Overrideメソッドをオーバーライドするときは、スーパークラスのメソッドをオーバーライドすることをコンパイラーに指示するアノテーションを使用することをお勧めします。

于 2013-03-11T22:04:03.060 に答える
0

オーバーライドとは、メソッドの新しい実装を作成してインスタンスの動作を変更することを意味します。すべての Java クラスは、クラス Object から equals()、hashCode()、および toString() を継承します。

これらのメソッドの新しい実装をクラスに記述して、toString() が RomanNumber を文字として返し、equals() が他のオブジェクトが RomanNumber であり、同じ値を持ち、2 つの等しいオブジェクトが持つ必要がある契約を尊重する場合に返すようにしてください。同じハッシュコード。

メソッドに @Override アノテーションを追加して、それらを意図的な変更としてマークし、コンパイラーが署名をチェックできるようにします。

于 2013-03-11T22:11:05.397 に答える