JAVA学习中,一个关于Object对象转换时对应方法的问题

来源:互联网 发布:燕十八php高性能 编辑:程序博客网 时间:2024/05/19 13:26

我在《Java语言程序设计》中,看到有这样的一个例子

Object myObject=new Circle(); if(myObject instanceof Circle) {   System.out.println("The circle diameter is "+      ((Circle)myObject).getDiameter()); }
 ”这里的强制转换因为,声明类型决定了在编译时匹配哪个方法。

使用myObject.getDiameter()会引起一个编译错误,因为Object类没有getDiameter方法。编译器无法找到和myObject.getDiameter()匹配的方法。所以,有必要将myObject转换为circle类型,告诉编译器myObject也是circle的一个实例。“
当我在实践代码

public class Test{    public static void main(String[] args)    {        Object circle1=new Circle();        Object circle2=new Circle();        System.out.println(circle1.equals(circle2));;    }}class Circle{    double radius;    public boolean equals (Object circle)    {       System.out.println("*****-");        return this.radius==((Circle)circle).radius;    }}

的时候,发现,当Circle类中,有在Object中的方法重写时,会匹配circle类中的equals()方法。

如果

public class Test{    public static void main(String[] args)    {        Object circle1=new Circle();        Object circle2=new Circle();        System.out.println(circle1.equals(circle2));;    }}class Circle{    double radius;    public boolean equals (Circle circle)    {       System.out.println("*****-");        return this.radius==((Circle)circle).radius;    }}

这里的equals方法就不是Object的重写,这时候才遵循书上说的,声明类型决定了在编译时匹配哪个方法这句话。
即是说,当声明类型中的方法被原来类型重写过,这个时候匹配的方法就是最近的那个类所覆盖的方法。

记下,以供以后学习。
0 0
原创粉丝点击