自己看书,做题时遇到一点问题,敲了代码调试答案对上了,但过程不明白,先上代码
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Object circle1 = new CircleTest();
Object circle2 = new CircleTest();
if(circle1 instanceof Object){
System.out.println(((CircleTest) circle1).radius);
System.out.println(((CircleTest) circle2).radius);
}
System.out.println(circle1.equals(circle2));
}
}
class CircleTest {
double radius;
public boolean equals(Object circle){
//public boolean euqals(CircleTest circle){
return this.radius == ((CircleTest)circle).radius;
//return this.radius == circle.radius;
}
}
main函数就不多说了,大家应该都能懂,主要问的是,在CircleTest类中,我知道它默认继承Object类
书上说想要重写Equal方法必须形参要传Object,不然java不会调用它
那么为什么同样是比较的radius,初始的radius都是0啊,
为什么传形参是Object的输出的就是TRUE,
形参是circle的就是false呢?
------解决方案--------------------
Object circle1 = new CircleTest();
Object circle2 = new CircleTest();
你声明的两个变量是Object类型的,所以
System.out.println(circle1.equals(circle2))的时候,调用的方法是
public boolean equals(Object circle)
而不是
public boolean euqals(CircleTest circle)
你override了public boolean equals(Object circle)的情况下,调用的是class CircleTest里的
public boolean equals(Object circle)方法。但当你写成public boolean euqals(CircleTest circle)的时候
执行 public boolean equals(Object circle)调用的是Object类里的 public boolean equals(Object circle)方法,自然是false