多态是java中面向对象的中的三大特征之一,分别为封装,继承,多态。
在现实世界中,我们对一种事物有多种描述形态,我们创建一个student学生类,再创建一个person人类,而我们的人物张三即是学生,他还是一个人,这就出现两种形态。
而java是一门面向对象的语言,同样可以用于描述一个事物的多种形态。
构成多态的三种条件
·必须有继承关系
·父类引用指向子类对象 例:Person per = new student();
·重写父类中的方法
我们创建了一个类
并给他创建一个子类,在子类中重写他的方法。
用父类的引用指向子类的对象,我们在调用方法时,就会发现它调用的是子类中的方法。
我们可以理解为,多态是同一个行为具有多个不同表现形式和形态的能力,多态就是一个接口,使用不同的实例而执行不同的操作。
我们应该多使用多态,多态是面对抽象编程,它有很多优点
·消除类型之间的耦合关系
·可替换性
·可扩充性
·灵活性
·简化性
我们要注意的是,在父类引用指向子类对象时,在编译过程中,编译器关心的是在父类中有没有这个方法,简单来说就说只检查语法,而在运行阶段它底层运行的是子类中的方法。这就是为什么同一个行为有多个不同表现形式和形态的能力。
多态中的向上转型和向下转型
向上转型,多态本身就是向上转型的过程。
例: 父类类名 父类引用 = new 子类类名();
使用场景:当不需要面向子类类型时,通过提高扩展性,或使用父类的功能就能完成相应的操作。
向下转型
一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用的数据。
例:子类类名 子类引用 = (子类类名) 父类引用
使用场景:当要使用子类中特有的功能。