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

来源:9-9 Java 中的 Object 类 Ⅱ

初级学习号

2015-06-17 12:18

感觉怪怪的

写回答 关注

3回答

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

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

    初级学习号

    非常感谢!

    2015-10-21 21:07:00

    共 2 条回复 >

  • 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变量强转为子类类型,然后才可以直接访问子类特有的成员变量.


    Kirito...

    other 这个变量可以直接拿来用的是么????

    2017-02-04 10:59:14

    共 1 条回复 >

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

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

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

    Dog d=(Dog)obj 


Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530560 学习 · 6091 问题

查看课程

相似问题