面向对象的第三大特征——多态

          一、概念

 二、实现多态的前提条件

三、多态中成员访问特点

四、多态的好处和弊端

 五、多态中的转型


【**写在开始!多态没我写的那么简单,里面还有很多的小细节要注意,比如遇到多态强转时遇到ClassCastException 错误怎么解决,这些都是需要知道的。本小文内容只是作为对多态的了解。如果你是大佬,直接略过叭**】

一、概念

多态:顾名思义就是 多种状态嘛(大白话)。翻译为专业语句是 同一个对象,在不同时刻表现出来的不同形态。

那么为什么会有多态?又怎么使用?

为什么会有?一个项目系统中,针对于同一对象有两种不同的表现类型,导致代码耦合度过高;多态好处在于降低类之间的耦合性(耦合性:类与类之间的关系过于紧密),提高代码复用性和可维护性。

又怎么使用?------------往下看

实现步骤:(先了解,继续往下看

    1、创建一个工厂类(如:StudentDaoFactory 类)

    2、类中提供由static 修饰的方法,在方法中创建对象并返回。(如:return new StudentDao( ) )


 二、实现多态的前提条件

  • 有继承(extends)或实现(implements)关系
  • 有方法重写
  • 有父类引用指向子类对象

【别忘了,我们为什么要有多态!!多想想多态出现的原因~】


三、多态中成员访问特点

构造方法:同继承一样,子类会通过super 访问父类构造方法

成员变量:编译看左边(父类),执行看左边(父类)

成员方法:编译看左边(父类),执行看右边(子类)

【因为成员方法中有重写覆盖了父类中的方法。而成员变量没有重写功能,所有成员方法执行看右边】

 项目描述:通过 a 打印输出父类中的 age 成员变量。即 编译和执行都看 Animal 父类中是否有该属性,所有 输出结果时 是Animal 中的 20 而非 Cat 子类中的 10;

 执行结果:

 成员方法同理(懒得写!)


四、多态的好处和弊端

好处:提高了程序的扩展性。具体体现在定义方法的时候,使用父类型作为参数该方法就可以接收这父类的任意子类对象

弊端:不能使用子类的特有功能。

执行结果:

 

至于 【弊端:不能使用子类的特有功能】,是因为 多态使用成员方法时编译看左边,当父类中没有子类中的特有的成员内容时,肯定在编译时就 直接爆红噻~~


 五、多态中的转型

为什么会有转型呢?因为当父类没有子类特有的成员内容,但又不得不要使用时,就有了转型的解决方案之一!!!

  • 向上转型( 多态创建对象的一般方法;以上main方法中 创建对象的方式都是,此处省略代码展示 )

                从子到父

                父类引用指向子类对象

  • 向下转型 ( 强制转换 )

                从父到子

                父类引用转为子类对象

代码演示: (play 是Cat 子类中特有的方法。向下转型,然后通过子类对象 调用。完美解决!

猜你喜欢

转载自blog.csdn.net/qq_51358596/article/details/127187380
今日推荐