Java-理解多态思想

  • 内容
  • 评论
  • 相关

学了继承关系,我们知道继承关系是一种”is  A”的关系,也就说子类是父类的一种特殊情况

问题: 子类的对象是动物?

既然子类是一种特殊的父类,那么我们可不可以认为狗对象/猫对象就是动物类型的对象.

Animal  d = new Dog();  //创建一只狗对象

Animal  c  = new Cat();    //创建一只猫对象

--------------------------------------------------------------

当我的代码变成以下的样子的时候,多态就产生了:

Animal    a   =  new    Dog();

对象(a)具有两种类型:

编译类型:  声明对象变量的类型,Animal,表示把对象看出什么类型.

运行类型:  对象的真实类型,Dog.运行类型--->对象的真实类型.

编译类型必须是运行类型的父类/或相同.

当编译类型和运行类型不同的时候,多态就出现了.

所谓多态: 对象具有多种形态,对象可以存在不同的形式.

Animal    a   = null;

a   =  new    Dog();   //a此时表示Dog类型的形态

a   =  new    Cat();    //a此时表示Cat类型的形态

--------------------------------------------------------------------

多态的前提:可以是继承关系(类和类)/也可以是实现关系(接口和实现类),在开发中多态一般都指第二种.

--------------------------------------------------------------------

我家里养了一只动物,名字叫”乖乖”,此时”乖乖”可以有多种形态;

乖乖  是狗,  乖乖的叫声: one one one.

乖乖  是猫,  乖乖的叫声: 喵    喵    喵.

多态的特点:

把子类对象赋给父类变量,在运行时期会表现出具体的子类特征(调用子类的方法).

Animal a = new Dog();

多态的好处:

需求:给饲养员提供一个喂养动物的方法,用于喂养动物.

没有多态:

发现,针对于不同类型的动物,我们得提供不同的feed方法来喂养.

不优雅.

 我想,只提供一个方法,就能统一喂养所有动物.

存在多态:

统一了喂养动物的行为。

从上述例子,可以得知多态的作用:当把不同的子类对象都当作父类类型来看待,可以屏蔽不同子类对象之间的实现差异,从而写出通用的代码达到通用编程,以适应需求的不断变化。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注