1.多态的概念
多态(polymorphism)本来是生物学里的概念,表示地球上的生物在形态和状态方面的多样性。
而在java的面向对象中,多态通俗点说就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生不同的状态。也就是说,在父类中定义的属性和方法,在子类继承后,可以有不同的数据类型或表现出不同的行为。这可以使得同一个属性或方法,在父类及其各个子类中,可能会有不同的表现或含义。比如针对同一个接口,我们使用不同的实例对象可能会有不同的操作,同一事件发生在不同的实例对象上会产生不同的结果。
看到这里,其实有一部分人已经懂了,因为他们在看我这篇文章之前,也看过很多不同的文章。如果你是这部分人,那么你们可以离开了,因为接下来我讲的是对上面概念的解释。我相信有一部分人还是不太懂。别慌,继续看下面,可以来帮助大家理解。
2.多态的作用
(1)灵活性和可扩展性:多态性使得代码更加灵活和可扩展。通过使用多态性,我们可以编写通用的代码,可以处理不同类型的对象而无需针对每种对象编写特定的代码。这使得程序更加灵活,可以方便地添加新的对象类型或修改现有的对象类型,而不需要修改大量的代码。
(2)代码重用:多态性促进了代码的重用。通过将共享的行为抽象为接口或父类,并在具体的子类中实现特定的行为,我们可以在不同的对象上重用相同的代码。这减少了重复编写代码的工作量,提高了代码的可维护性和可读性。
(3)统一的接口:多态性提供了一种统一的接口来处理不同类型的对象。通过针对共同的基类或接口进行编程,我们可以使用相同的方法名来执行不同对象的操作。这使得代码更加整洁和一致,增加了代码的可读性和可理解性。
(4)扩展性和可维护性:通过多态性,我们可以轻松地扩展和修改现有的代码,而无需对现有代码进行大规模的修改。我们可以通过添加新的子类来增加新的功能,而无需改变现有的代码。这样可以减少潜在的错误和影响,并提高代码的可维护性。
(5)代码组织和管理:多态性有助于更好地组织和管理代码。通过将具有相似行为的对象归类为共同的类型,并使用多态性来处理它们,可以使代码更加结构化和模块化。这样可以提高代码的可读性和可维护性,并使开发过程更加高效。
3.多态的特性
根据多态的要求,Java对象的类型可以分为编译类型和运行类型,多态有如下特性:
(1)一个对象的编译类型与运行类型可以不一致;
(2)编译类型在定义对象时就确定了,不能改变,而运行类型却是可以变化的;
(3)编译类型取决于定义对象时 =号的左边,运行类型取决于 =号的右边所以我们在使用多态方式调用方法时,首先会检查父类中是否有该方法,如果没有,则会产生编译错误;如果有,再去调用子类中的同名方法。即编译时取决于父类,运行时取决于子类。
4.多态的必要性
我们要想实现多态,需要满足3个必要条件:
(1)继承:多态发生在继承关系中,必须存在有继承关系的父类和子类中,多态建立在封装和继承的基础之上;
(2)重写:必须要有方法的重写,子类对父类的某些方法重新定义;
(3)向上转型:就是要将父类引用指向子类对象,只有这样该引用才既能调用父类的方法,又能调用子类的方法。只有满足了以上3个条件才能实现多态,开发人员也才能在同一个继承结构中,使用统一的代码实现来处理不同的对象,从而执行不同的行为。
5.描述多态很形象的一张图片
6.总结
多态指的是不同子类型的对象,对同一行为作出的不同响应;
● 实现多态要满足继承、重新、向上转型的条件;
● 多态分为编译时多态和运行时多态,我们常说的多态是指运行时多态;
● 方法重载是编译时多态,方法重写是运行时多态;
● 父类引用指向子类对象时,调用的实例方法是子类重写的方法,父类引用不能调用子类新增的方法和子类特有属性;
● 多态使得代码更加灵活,方便了代码扩展。