概述
定义:某一类事物的多种存在形态。
例:动物中猫,狗。
猫这个对象对应的类型是猫类型
猫 x = new 猫();
同时猫也是动物中的一种,也可以把猫称为动物。
动物 y = new 猫();
动物是猫和狗具体事物中抽取出来的父类型。
父类型引用指向了子类对象。
程序中体现:
父类或者接口的引用指向或者接收自己的子类对象。
好处和作用:
多态的存在提高了程序的扩展性和后期可维护性
前提:
- 需要存在继承或者实现关系
- 要有覆盖操作
多态的特点
成员函数:
编译时:要查看引用变量所属的类中是否有所调用的成员。
在运行时:要查看对象所属的类中是否有所调用的成员,其实这里肯定是有的,因为编译通过,证明一定是父类中的方法,所以子类肯定存在相同的方法。
成员变量:
只看引用变量所属的类。
多态的应用
主板与PCI例子
1: /*
2: 电脑运行实例
3: */
4: 5: interface PCI
6: {7: public void open();
8: public void close();
9: } 10: 11: //网卡
12: class NetBoard implements PCI
13: {14: public void open()
15: {16: System.out.println("netboard open!");
17: }18: public void close()
19: {20: System.out.println("netboard open!");
21: } 22: }23: //声卡
24: class SoundBoard implements PCI
25: {26: public void open()
27: {28: System.out.println("soundboard open!");
29: }30: public void close()
31: {32: System.out.println("soundboard close!");
33: } 34: }35: class MainBoard
36: {37: private PCI[] pArr;
38: MainBoard(PCI... pArr) 39: {40: this.pArr = pArr;
41: } 42: 43: public void open()
44: { 45: //启动具有PCI接口的所有设备
46: openPCI();47: System.out.println("mainboard run!");
48: }49: public void openPCI()
50: {51: for(PCI p : pArr)
52: if(p != null)
53: p.open(); 54: }55: public void closePCI()
56: {57: for(PCI p : pArr)
58: if(p != null)
59: p.close(); 60: }61: public void close()
62: {63: //关闭具有PCI接口的所有设备
64: closePCI();65: System.out.println("mainboard close!");
66: } 67: }68: class PCIDemo
69: {70: public static void main(String[] args)
71: {72: PCI[] pArr = {new NetBoard(),new SoundBoard()};
73: 74: MainBoard m = new MainBoard(pArr);
75: 76: m.open(); 77: m.close(); 78: 79: } 80: }