多态是同一个行为具有多个不同表现形式或形态的能力。

父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为

多态现实意义理解:

  • 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
  • Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

  多态体现为父类引用变量可以指向子类对象。

多态向上转型语法格式:

Parent p = new Child();
多态存在的三个必要条件:
  • 继承 在多态中必须存在有继承关系的子类和父类。
  • 重写 子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的

方法。

  • 向上转型    在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

重点:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

  • 重载式多态,也叫编译时多态。也就是说这种多态在编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。

  • 重写式多态,也叫运行时多态。这种多态通过动态绑定(dynamic binding)技术来实现,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才知道调用的是哪个子类的方法。

这种多态通过函数的重写以及向上转型来实现。

多态中成员的特点

  1. 多态成员变量:编译运行看左边

成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量绑定,属于静态绑定

Fu f=new Zi();

System.out.println(f.num);//f是Fu中的值,只能取到父中的值

     2.多态成员方法:编译看左边,运行看右边

成员方法与引用变量实际引用的对象的方法动态绑定,去看对象实际类型进行调用方法

  Fu f1=new Zi();

  System.out.println(f1.show());//f1的声明类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。

      3.构造方法:

创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化

多态其余转型问题下期共同讨论。

05-27 04:34