多态
- 回顾概念:子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为
- 实现形式 :继承和接口
- 条件 :
- 要有继承
- 要有重写
- 父类引用指向子类对象(直接把一个子类对象赋给一个父类引用变量,也称为向上转型)
引用变量的强制类型转换
- 类型不可转换时强制类型转换会出现ClassCastException异常
- instanceof运算符(使用它可避免出现上述异常)
- 用于判断引用类型变量可否强制类型转换成子类或实现类实例
- xxx(引用类型变量) instanceof xxxxx(子类或其实现类)
- 返回值为布尔值,true 或false
- 子类重写了父类的方法时,实际new的是哪个子类,就调用该子类重写的方法,而子类中重载的方法不会被调用
方法的重载
- 回顾概念:一个类中定义的不同方法名字相同,参数不同。调用时会根据不同的参数表选择不同的方法。
两者区别
- 方法重载 在方法调用之前,编译器就已经确定了所要调用的方法,也就是“静态绑定”;而对于多态,只有等到方法调用的那一刻
,编译器才会确定所要调用的具体方法,也就是“动态绑定”
多态机制遵循的原则(摘自网上)
- 概括为:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法,但是它仍然要根据继承链中方法调用的优先级来确认方法,该优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。