多态

139 阅读1分钟

一、 静态多态

函数重载(overload),也叫做静态多态。多态,通俗讲就是一个东西,在不同情况下呈现不同形态。比如,一个函数名 abs,在不同参数的情况下可以执行不同的代码,而调用者只需要记住一个函数名称。 为什么是静态的呢?那是因为虽然函数名只有一个,但是源代码中,还得根据不同参数编写多个函数。

函数重载必须满足以下条件之一:

  • 函数参数个数不同。
  • 函数参数个数相同,类型不同。
  • 函数参数个数相同,类型相同,但是在参数列表中的出现顺序不同。

二、 动态多态

  1. 动态多态的理论基础:父类引用可以指向子类对象。
  • 强制转换 : int i = (int) 1.2; // 不安全转型 1.2 => 1 自动转型: byte b= 10; int i = b;// 自动转型,安全 10 => 10 int i = 10; float f = i;// 自动转型 10=>10.0 A a = new B();// A是B的父类。
  • 转型之后依然调用子类重写的方法,不能调用子类独有的方法。
  • 严格讲,父类类型对象无法转换成子类类型,但是有一种特殊情况,如果父类类型对象原来就是某一种子类类型的对象,则可以转换成相应子类类型对象,此时使用强制转换即可。
A a = new B();
B b = (B)a;