一、多态定义
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
二、实例(花木兰替父从军)
// 父类(花弧)
public class Huahu{
public String name="Huahu";
public int age=45;
public static void sayMe(){
System.out.println("大家好,我叫花弧,今年45岁。");
}
public void fight(){
System.out.println("干架!");
}
}
// 子类(花木兰)
public class HuaMulan extends Huahu{
public String name="HuaMulan";
public int age=19;
public void dressing(){
System.out.println("化妆!");
}
}
向上转型与向下转型:
public class Application {
public static void main (String[] args){
//替父从军,向上转型!
Huahu huahu=new HuaMulan();
System.out.println(huahu.name);
System.out.println(huahu.age);
huahu.sayMe();
// 上下两个方法输出内容相同,此时子类未从写,用父类的方法
HuaMulan.sayMe();
huahu.fight();
// 有一天,仗打完了恢复身份。向下转型!
HuaMulan huamulan=(HuaMulan)huahu;
System.out.println(huamulan.name);
System.out.println(huamulan.age);
huamulan.dressing();
huamulan.sayMe();
}
}
三、多态的优点
当使用多态方式调用方法时,首先检查父类中是否有该方法,
如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
-
- 消除类型之间的耦合关系
-
- 可替换性
-
- 可扩充性
-
- 接口性
-
- 灵活性
-
- 简化性