向上和向下转型的实例思考
向上向下转型的一些思考
public boolean equals(Object obj) {
if (this == obj){
return true;
}
if (!(obj instanceof Doctor)){
return false;
}
Doctor doctor = (Doctor)obj;
return this.name == doctor.name && this.age == doctor.age
&& this.gender == doctor.gender && this.job == doctor.job
&& this.sal == doctor.sal;
}
- Object 子类Doctor重写了Object的equals()方法,该equals方法用来判断两个对象是否相等,相等就是判断属性是否相等
- 之后在main()方法中调用
public static void main(String[] args) {
Doctor doctor1 = new Doctor("JAMES", 32, "外科", '男', 20000);
Doctor doctor2 = new Doctor("JAMES", 37, "外科", '男', 20000);
// Doctor doctor2 = new Doctor("Murry", 25, "内科", '男', 10000);
System.out.println(doctor1.equals(doctor2));
Object o = new Doctor("JAMES", 37, "外科", '男', 20000);
System.out.println(o.equals(doctor2));
}
主要的关注点在向上和向下转型
Object o = new Doctor("JAMES", 37, "外科", '男', 20000);
该语句将父类的引用指向子类的对象
在后面调用o.equals(doctor2)在判断obj instanceof Doctor的时候,因为instanceof判断的是运行类型,因向上转型后o的运行类型是Doctor,所以通过了判断,后面的调用o.equals方法时会动态绑定,真正的执行的时候是执行运行类型的equals方法,Doctor中重写了equals方法,所以调用成功判断o和doctor2是否相等。

浙公网安备 33010602011771号