1.多态的定义:多态是在继承/实现情况下的一种现象,表现为:对象多态,行为多态。
S和T都继承于P类,S和T都有run()方法,T类是经过方法重写的,
P p1 = new S();
p1.run();
P p2 = new T();
p2.run();
多态的前提:存在继承/实现关系;存在父类引用子类对象;存在方法重写。
2.使用多态的好处
(1)在多态模式下,右边对象是解耦合的,更便于扩展和维护。
使用上边的例子,就是可以把new student改成new teacher 。
(2)定义方法时,使用父类类型的形参,可以接受一切子类对象,扩展性更强,更便利。
3.多态下不能使用子类的独有功能。
示例
解决方法:类型转换
(1)自动类型转换:父类 变量名 = new 子类(); people p = new teacher();
(2)强制类型转换:子类 变量名 = (子类)父类变量; teacher t = (teacher)p;
存在继承关系就可以在编译阶段强制类型转换,运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastExcaption)。
但是如果按照下面第十三行写法会报错,因为P2时student对象,两个子类不能互相转。
解决方法:instanceof关键字
上面代码20行往下运行结果:
4.final关键字
5.抽象类:abstract
6.抽象类的好处
特点是在调用时必须进行重写。
7.抽象类的应用场景
解决方法中的重复代码。
将中间不重复的地方换成抽象类重写代码。