如何在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;
}
}