Java笔记(十五)……面向对象IV多态(polymorphism)

概述

定义:某一类事物的多种存在形态。

例:动物中猫,狗。

猫这个对象对应的类型是猫类型

猫 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: }

多态的设计是Java的精髓,以后会做进一步的讨论

posted @ 2013-10-18 00:01  ShawnWithSmallEyes  阅读(549)  评论(3编辑  收藏  举报