回 帖 发 新 帖 刷新版面

主题:父类使用子类的构造函数

public class Test {
  public static void main(String[] args) {
    [color=FF0000]Object circle1 = new Circle();[/color]
    Object circle2 = new Circle();
    Circle circle3 = new Circle();
    Circle circle4 = new Circle();
    System.out.println(circle1.equals(circle2));
    System.out.println(circle3.equals(circle4));
    System.out.println(circle1.equals(circle3));
    System.out.println(circle3.equals(circle1));
  }
}

class Circle {
  double radius;

  //equals方法从载
  public boolean equals(Circle circle) {
  System.out.println("user equals about Circle!");
    return this.radius == circle.radius;
  }

  //equals方法覆盖(是覆盖父类Object的equals方法)
  public boolean equals(Object circle) {
  System.out.println("user equals about Object!");
     return this.radius==((Circle)circle).radius;
  }
}

那位能帮忙解释下红色字体那一句?

回复列表 (共4个回复)

沙发

class A{
    int i;
    A(int i){this.i=i;}
    public static void pri(){System.out.println("好");}
    }
class B extends A{
    B(){}
    public static void pri()
    {
        System.out.println("huai ");
    }
    public static void main(String args[])
    {
            A a=new B();
        a.pri();
    }
}
    
发个例子你看哈,其实他还是调用自己的默认构造函数不是调用子类的构造函数,在父类中加入A(){}就可以执行了.想想看

板凳

谁能解释结果?
结果是子类覆盖了父类的方法。

3 楼

new Circle(); 你不要忘了你是将子类实例化为父类,而不是什么父类调用子类什么什么方法。由于子类中以明确覆盖了父类中的方法所以 circle1 自然equals方法是被覆盖调了的。就是发帖的主题让我有些琢磨不透似乎打错了吧?

4 楼

你重载了equals不影响多态性!所以你重写了equals后,通过向上类型转换后,父类对象调用的一定是子类的equals!而子类对象调用equals时,当然进行类型匹配的调用相应方法!

我来回复

您尚未登录,请登录后再回复。点此登录或注册