为了账号安全,请及时绑定邮箱和手机立即绑定

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

感觉怪怪的

正在回答

5 回答

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

0 回复 有任何疑惑可以回复我~
#1

lqg111

类对象不就关注类的属性和类型吗?
2015-07-27 回复 有任何疑惑可以回复我~
#2

初级学习号 提问者

非常感谢!
2015-10-21 回复 有任何疑惑可以回复我~

不可以省略.原因如下:

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

public boolean equals(Object obj){}

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

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

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

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


0 回复 有任何疑惑可以回复我~
#1

Kiritomas

other 这个变量可以直接拿来用的是么????
2017-02-04 回复 有任何疑惑可以回复我~

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

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

Dog d=(Dog)obj 


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530553    人
  • 解答问题       6091    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信