当前位置: 代码迷 >> Eclipse >> 学生一个,遇到点有关问题,求讨论
  详细解决方案

学生一个,遇到点有关问题,求讨论

热度:32   发布时间:2016-04-23 00:40:20.0
学生一个,遇到点问题,求讨论
自己看书,做题时遇到一点问题,敲了代码调试答案对上了,但过程不明白,先上代码
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
  相关解决方案