掌握多态的概念(难点)
在面向对象编程中,多态是指同一个行为具有多个不同的表现形式或形态的能力(相同的行为,不同的实现)
多态的好处是不管类的实现代码怎么改动都不会影响到类的使用代码,这样的代码会有更好的可扩展性;这就是设计原则当中所谓的"只针对抽象编程,而不是针对实现编程"
编译时系统就能决定对象调用对应的方法 (使用方法重载实现)
运行时系统才能动态确定对象调用的方法 (使用动态绑定技术和方法重写实现)
向上转型(自动类型转换):从子类向父类转换类型
Father father = new Son();
向下转型(强制类型转换):从父类向子类转换类型
Father father = new Son(); Son son = (Son)father;
Java 语言的动态多态机制导致了引用类型变量的声明类型和实际引用对象的类型可能不一致。为更准确鉴别一个对象的真正类型,Java语言引入了 instanceof 运行符,用于判断运行时对象的真正类型
对象名 instanceof 类名
Son son = new Son ( ); if ( son instanceof Son ) { //判断运行时对象的真正类型 System.out.println(“son对象的类型是 Son”) ; }
动态绑定(dynamic binding)也叫延迟绑定或后期绑定,指在运行时判断所引用对象的实际类型,根据实际类型调用其相应的方法,它是实现动态多态的最关键技术
子类与父类有继承关系
子类重写父类的方法
父类变量引用子类对象(向上转换)
父类变量调用子类重写的方法
public class Father { public void play() { return “打篮球”;} } public class Son extends Father { public void play() { return “踢足球”;} } Father father = new Son( ); father.play( );
多态对已存在的代码具有可替换性
增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能
多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的
它在应用中体现了灵活多样的操作,提高了使用效率
多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态绑定