初级学习号
2015-06-17 12:18
感觉怪怪的
这是需要的,有些obj需要转换类型的
不可以省略.原因如下:
这里是重写equals方法的吧.方法声明如下
public boolean equals(Object obj){}
这个方法中的参数列表里只有一个Object类引用数据类型的变量obj,obj可以保存Object对象和Object类子类对象的引用或者说地址值,这里用到了多态.多态的成员变量访问特点:编译时看父类,运行时还是看父类.由这个特点知道这里的obj只能访问父类的成员变量,不能访问传入的子类的特有的属性(成员变量),如果要访问子类对象的成员变量必须通过强制类型转换(向下转型)将变量obj转换为子类引用数据类型,根据你的例子,这里需要
Dog other = (Dog)obj;//向下转型
通过这个操作后,我们得到Dog类型的引用数据类型的变量other,它可以访问Dog类中定义的成员变量.
总结一下,由于多态成员访问特点导致obj不能直接访问子类特有的成员变量,因此用向下转型将obj变量强转为子类类型,然后才可以直接访问子类特有的成员变量.
我也想了下,可能是这个原因。B extends A,但B和A的属性(非属性值)一样,此时
this.getClass==obj.getClass()相等,但此时需要强制类型转换
Dog d=(Dog)obj
Java入门第二季 升级版
530560 学习 · 6091 问题
相似问题