问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

若this.getClass==obj.getClass()成立,那么Dog d=(Dog)obj 可以省略吧。

感觉怪怪的

提问者:初级学习号 2015-06-17 12:18

个回答

  • 康振宁
    2015-06-18 10:36:47
    已采纳

    这是需要的,有些obj需要转换类型的

  • skyleon4266050
    2016-10-23 11:52:31

    不可以省略.原因如下:

    这里是重写equals方法的吧.方法声明如下

    public boolean equals(Object obj){}

    这个方法中的参数列表里只有一个Object类引用数据类型的变量obj,obj可以保存Object对象和Object类子类对象的引用或者说地址值,这里用到了多态.多态的成员变量访问特点:编译时看父类,运行时还是看父类.由这个特点知道这里的obj只能访问父类的成员变量,不能访问传入的子类的特有的属性(成员变量),如果要访问子类对象的成员变量必须通过强制类型转换(向下转型)将变量obj转换为子类引用数据类型,根据你的例子,这里需要

    Dog other = (Dog)obj;//向下转型

    通过这个操作后,我们得到Dog类型的引用数据类型的变量other,它可以访问Dog类中定义的成员变量.

    总结一下,由于多态成员访问特点导致obj不能直接访问子类特有的成员变量,因此用向下转型将obj变量强转为子类类型,然后才可以直接访问子类特有的成员变量.


  • Hisos
    2015-12-05 16:25:00

    我也想了下,可能是这个原因。B extends A,但B和A的属性(非属性值)一样,此时

    this.getClass==obj.getClass()相等,但此时需要强制类型转换

    Dog d=(Dog)obj