若this.getClass==obj.getClass()成立,那么Dog d=(Dog)obj 可以省略吧。
感觉怪怪的
感觉怪怪的
2015-06-17
不可以省略.原因如下:
这里是重写equals方法的吧.方法声明如下
public boolean equals(Object obj){}
这个方法中的参数列表里只有一个Object类引用数据类型的变量obj,obj可以保存Object对象和Object类子类对象的引用或者说地址值,这里用到了多态.多态的成员变量访问特点:编译时看父类,运行时还是看父类.由这个特点知道这里的obj只能访问父类的成员变量,不能访问传入的子类的特有的属性(成员变量),如果要访问子类对象的成员变量必须通过强制类型转换(向下转型)将变量obj转换为子类引用数据类型,根据你的例子,这里需要
Dog other = (Dog)obj;//向下转型
通过这个操作后,我们得到Dog类型的引用数据类型的变量other,它可以访问Dog类中定义的成员变量.
总结一下,由于多态成员访问特点导致obj不能直接访问子类特有的成员变量,因此用向下转型将obj变量强转为子类类型,然后才可以直接访问子类特有的成员变量.
举报