如何在Java中编写重写方法

如何在Java中编写重写方法,java,overriding,Java,Overriding,这是家庭作业的一部分 我正在尝试创建一个名为RomanNumeric的类,该类有多种方法。第一种方法,romannumeric检查字符串rn是否为罗马数字。第二种方法将罗马数字转换为十进制值。我的问题在于其余的方法。我被要求为.equals()、.compareTo()和toString()创建一个覆盖文件。我的问题是我该如何开始这样做?覆盖意味着什么?我应该看看他们做了什么,然后模仿他们吗?如果是,在哪里可以查看定义.compareTo()或toString()的方法 如果有帮助,我可以发布当

这是家庭作业的一部分

我正在尝试创建一个名为
RomanNumeric
类,该类有多种方法。第一种方法,
romannumeric
检查字符串
rn
是否为罗马数字。第二种方法将罗马数字转换为十进制值。我的问题在于其余的方法。我被要求为
.equals()
.compareTo()
toString()
创建一个覆盖文件。我的问题是我该如何开始这样做?覆盖意味着什么?我应该看看他们做了什么,然后模仿他们吗?如果是,在哪里可以查看定义
.compareTo()
toString()的方法

如果有帮助,我可以发布当前代码。

当一个类扩展另一个类时,它会继承其所有非私有实例成员

例如,
romanumeric
扩展了
Object
,因此它继承了后者的
toString()
方法。这意味着您可以在任何
romanumeric
实例上调用
toString()
,它将调用
对象.toString()
方法

但是,
RomanNumeric
可以选择通过提供自己的定义来覆盖此方法,该定义将取代它继承的定义。然后,当您对
RomanNumeric
实例调用
toString()
时,它将调用您定义的方法。(即使您通过
对象
引用引用
RomanNumeric
实例,此操作也有效。)

所以,你被要求充实这个准则:

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
    }

}
请注意,尽管您似乎被告知,但并没有“覆盖文件”这样的东西。与任何其他方法一样,上述方法在
RomanNumeric.java
中定义。

当一个类扩展另一个类时,它将继承其所有非私有实例成员

例如,
romanumeric
扩展了
Object
,因此它继承了后者的
toString()
方法。这意味着您可以在任何
romanumeric
实例上调用
toString()
,它将调用
对象.toString()
方法

但是,
RomanNumeric
可以选择通过提供自己的定义来覆盖此方法,该定义将取代它继承的定义。然后,当您对
RomanNumeric
实例调用
toString()
时,它将调用您定义的方法。(即使您通过
对象
引用引用
RomanNumeric
实例,此操作也有效。)

所以,你被要求充实这个准则:

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
    }

}
请注意,尽管您似乎被告知,但并没有“覆盖文件”这样的东西。与任何其他方法一样,上述方法在
RomanNumeric.java
中定义。

来自:
子类中的实例方法与超类中的实例方法具有相同的签名(名称,加上其参数的编号和类型)和返回类型,将覆盖超类的方法

子类重写方法的能力允许类从行为“足够接近”的超类继承,然后根据需要修改行为。重写方法具有与其重写的方法相同的名称、参数数量和类型以及返回类型

重写方法时,可能需要使用
@Override
注释,该注释指示编译器要重写超类中的方法。

来自:
子类中的实例方法与超类中的实例方法具有相同的签名(名称,加上其参数的编号和类型)和返回类型,将覆盖超类的方法

子类重写方法的能力允许类从行为“足够接近”的超类继承,然后根据需要修改行为。重写方法具有与其重写的方法相同的名称、参数数量和类型以及返回类型


重写方法时,您可能希望使用
@Override
注释,该注释指示编译器您打算重写超类中的方法。

重写意味着通过创建方法的新实现来更改实例的行为。每个Java类都从类对象继承equals()、hashCode()和toString()

尝试在类中编写这些方法的新实现,以便toString()以字母形式返回RomanNumber,如果另一个对象是RomanNumber且具有相同的值,则返回equals(),并遵守两个相等对象需要具有相同哈希代码的约定


向方法添加@Override注释,将它们标记为故意更改,以便让编译器检查签名。

重写意味着通过创建方法的新实现来更改实例的行为。每个Java类都从类对象继承equals()、hashCode()和toString()

尝试在类中编写这些方法的新实现,以便toString()以字母形式返回RomanNumber,如果另一个对象是RomanNumber且具有相同的值,则返回equals(),并遵守两个相等对象需要具有相同哈希代码的约定


向方法添加@Override注释,将其标记为故意更改,以便让编译器检查签名。

您需要做的是重新定义这些方法:

public class RomanNumeral implements Comparable<RomanNumeral>{

@Override
public boolean equals(Object obj) {
// your conditions and return true or false
}

@Override
public String toString() {
return "Show the world my representation";
}

public int compareTo(T o) {
/* your conditions and if returns:
Less than zero -> instance precedes obj in the sort order.
Zero -> instance occurs in the same position in the sort order as obj
Greater than zero -> instance follows obj in the sort order)*/ 
}
公共类RomanNumeric实现可比较{
@凌驾
公共布尔等于(对象obj){
//您的条件并返回true或false
}
@凌驾
公共字符串toString(){
返回“向世界展示我的代表”;
}
公共内部比较(TO){
/*您的条件和如果返回:
小于零->实例在排序顺序中位于obj之前。
Zero->instance与obj在排序顺序中的相同位置出现
大于零->英寸
public class CollegeStudent extends Student{

    String studentId;

}
// Code
CollegeStudent myCollegeStudent = new CollegeStudent("Dennis", "Ritchie", "2.2");
String identity = myCollegeStudent.getIdentity();
// Code
public class CollegeStudent extends Student{

    String studentId;

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