一、多态介绍
多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。
对象多态就比如水果可以是苹果也可以是西瓜。
行为多态如何分辨呢,编译的时候会看People类中是否有run方法,运行的时候看Teacher中或者Student中的run方法。
多态的前提:有继承/实现关系;存在父类引用子类对象;存在方法重写。
多态注意事项:多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。
使用多态的好处:在多态形式下,右边对象是解耦合的,更便于拓展和维护。并且定义方法时,使用父类类型的形参,可以接收一切子类对象,拓展性更强。
public class Test {public static void main(String[] args) {//多态的好处//1.对象多态:一个对象可以有多个类,如果一个对象是某个类,那么它可以是其他类People p1 = new Teacher();p1.run(); //好处1:实现解耦合,右边对象可以随时切换,后续业务随机应变//好处2:可以使用父类类型的变量作为形参,可以接受一切子类对象Student s1 = new Student();Teacher t1 = new Teacher();test(s1);test(t1);} public static void test(People p) {}
}
二、类型转换
自动类型转换:父类 变量名 = new 子类();
强制类型转换:子类 变量名 = (子类) 父类变量
多态下的问题:无法直接调用子类的独有功能,而使用强制类型转换就可以解决问题:
强制类型转换的注意事项:存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。运行时,如果发现对象的真实类型和强制转换后的类型不同,就会报类型转换异常错误。
强制转换前可以使用instanceof关键字,判断当前对象的真实类型,再进行转换。