多态初步理解

多态初步理解

 

概念: 多态,该名称来本来自于生物学中的一个专有名词,表示生物在不同阶段的不同形态。在哲学层面,该词也可以很好的描述Java 中提高类的丰富度的技术,因此借用了该词。

 

多态技术产生的原因:

Java 为了达到继承逻辑清晰的目的,放弃了 C++ 中的多继承,采用了单继承。从而导致了类的丰富度不够。为了解决这一问题,设计者就在 类的向下扩展 做文章,从而衍生出了 多态技术。

 

多态的分类:

静态多态 ,动态多态

注意:此处的静态,指在程序运行前,程序员就能够清楚的明白程序即将调用的是哪段代码;

      反之,在程序执行后才能知道调用的具体代码的则为 动态多态。

 

静态多态典型技术(此处不详述):

方法的重载;

方法的重写;

 

动态多态:

1、类的继承实现;

2、接口的实现;

 

类的继承

实现手段:动态绑定 和 重写实现 进行组合。

基础技术准备:数据转型

多态初步理解_第1张图片

 

设计关键点:

  1. 动态绑定:父类引用 各种子类对象(动态绑定方式 一)
  2. 调用的是定义在父类中,又被子类重写的方法

3、 定义在父类中,是为了保证:父类的引用可以调用到这个方法

4、 用子类去重写,是为了体现不同子类对象的相同行为,不同实现的多态性

注意:如此设计满足了开闭原则设计,利用动态绑定技术,实现多态行为

 

         特殊情况:

         在设计之初,我们都是将 子类的对象装进 父类的引用,这样只能访问到父类中定义的属性和方法,如果一定要访问子类的特有属性和方法,就不可以了。

 

解决办法只有一个,即 将该引用 强制转换 成子类类型的引用,然后调用其中的特有属性和方法。

 

又会产生一个问题:父类有很多子类,要是传进来的子类并不是你强制转换的子类,由于不同子类中的特有属性和方法肯定是不同的,程序会报异常:ClassCastException(类型转换异常)。

为了解决该问题,只能在强转前,先 运用 instanceof关键字 进行判断:强转的子类是我所需要的,就强转,不是,咱就不操作了。从而保证程序的运行正常。

 

总结:多态是一个运用非常频繁的技术,此处仅仅是对其语法方面的内容进行总结,还要用代码进行实践。

实践是检验真理的唯一标准。

你可能感兴趣的:(Java)