向上和向下转型的实例思考

向上向下转型的一些思考

    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是否相等。

posted @ 2022-07-12 22:41  AINIBYM  阅读(34)  评论(0)    收藏  举报