多态性概述
多态是同一个行为具有多个不同表现形式或形态的能力。是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态的优点:
1)消除类型之间的耦合关系 2)可替换性 3)可扩充性
4)接口性 5)灵活性 6)简化性
多态的缺点:
当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态存在的三个必要条件:
1)必须要有关系(比如继承、实现) 2)重写(覆盖操作)
3)向上转型(父类引用指向子类对象 // 例如Animal a = new Cat();)
多态性,是面向对象中最重要的概念,在java中有两种体现(表现形式):
1)方法的重载(overload)和重写(overwrite)。
2)对象的多态性——可以直接应用在抽象类和接口上。
多态的分类
多态一般分为两种:重写式多态和重载式多态。
重载式多态,也叫编译时多态。也就是说这种多态再编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。
但是这里是有歧义的,有的人觉得不应该把重载也算作多态。因为很多人对多态的理解是:程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,这种情况叫做多态。 这个定义中描述的就是我们的第二种多态—重写式多态。并且,重载式多态并不是面向对象编程特有的,而多态却是面向对象三大特性之一。我觉得大家也没有必要在定义上去深究这些,同一个行为具有多个不同表现形式或形态的能力就是多态,所以重载也是一种多态。
重写式多态