在这里是Java新手,我有一个基本问题,其他线程或文档中的先前回答一半不能回答,但我仍然不完全了解该机制,我想确定自己涵盖了基础知识(底部代码,问题在中间)。
基本上,我重写equals()方法来检查两个MyDate对象是否具有相同的日期。我执行instanceof检查o对象是否为MyDate对象,然后将类型临时对象专门转换为MyDate对象o
,然后比较日期。 当temp变量已经属于MyDate类时,为什么要将其转换为o的MyDate类?
- 您是否将temp变量用作您要运行equals()比较的对象的简便引用?因为您使用equals()作为比较
MyDate.equals(myotherDate)
,所以在代码中,如果我不指定变量来保存引用,则会出现各种错误(临时无法解析为变量,类型不匹配等,基本上是编译器)除非您编写更多代码,否则不确定在哪里查看。
2a。其他一些线程则说了些什么,即instanceof检查实例是否来自类时,它检查 base 类,但不检查子类。之所以进行类型转换,是因为您要专门告诉编译器检查该特定对象(从常规对象到特定对象的类型转换)。注意:这可能是特定于版本和口味的类型问题,我对类似问题有不同的回答。
2b。强制转换会更改引用,而不是对象本身。因此,如果对象来自相同的类,但来自不同的子类,则它不会在运行时而不是在编译时失败。而且我不会收到ClassCastException吗?
public boolean equals(Object o) {
if (o instanceof MyDate) {
MyDate temp = (MyDate) o;
if ((temp.day == day) && (temp.month == month) && (temp.year == year)) {
return true;
}
}
return false;
}