掌握多态的好例子

最近看了张孝祥的JAVA教程,在看到多态这一块时感觉眼前一亮,觉得他这块的一个例子对多态的理解有很大的帮助。
相信每个人在学习多态时都会遇到一些问题,初学时不是很理解多态,不明白他到底有何用,我也一样对这很苦恼,不过慢慢还是对多态有了一些理解。今天把张孝祥这个多态的例子分享给大家

这个例子是一个关于PCI卡与主板相结合响应主板的问题
大家应该明白PCI卡是什么东西吧?就是主板上插的声卡,网卡,显卡等,在主板上我们可以看到一些PCI插槽,这些插槽对应着相应的PCI卡,只有插入正确才能极其才能正常响应
我们知道不同的PCI卡制造厂商生产PCI卡时要符合一个共同标准去制造,而不同的主板制造厂也要符合一个共同的标准去制造,只有符合一个标准PCI卡才能正确响应主板
所以我们可以利用下面的代码来模拟PCI卡与主板的结合

  1. interface PCI{    //定义一个接口,这里表示一个PCI标准
  2.  void start(); //当启动时
  3.  void stop(); //当停止时
  4. }
  5. class NetworkCard implements PCI{  //一块网卡实现了PCI标准
  6.  public void start() {    //启动时响应一个方法
  7.   System.out.println("NetCard is start");
  8.   
  9.  }
  10.  public void stop() {    //关闭时响应一个方法
  11.   System.out.println("NetCard is stop");
  12.   
  13.  }
  14. }
  15. class SoundCard implements PCI{  //一块声卡实现了PCI标准
  16.  public void start() {    //启动时响应一个方法
  17.   System.out.println("SoundCard is start");
  18.   
  19.  }
  20.  public void stop() {    //关闭时响应一个方法
  21.   System.out.println( "SoundCard is Stop");
  22.   
  23.  }
  24. }
  25. class MainBorar{      //定义一个主板类,但插入网卡或者声卡时响应其对应的方法
  26.  void usepciCard(PCI p){     //但传来的是网卡的参数就调用网卡的方法,传来的是声卡的
  27.   p.start();            //就调用声卡的方法,仔细体会这块
  28.   p.stop();           
  29.  }
  30. }
  31. public class Assembler {    //定义个组装者由组装电脑的负责把不同的PCI卡插入主板上
  32.  public static void main(String[] args) {
  33.   
  34.   MainBorar mb = new MainBorar();  //组装者取一个主板来
  35.   NetworkCard nc = new NetworkCard();//组装者取一个网卡来
  36.   SoundCard sc = new SoundCard();    //组装者取一个声卡来
  37.   mb.usepciCard(nc);      //组装者把网卡插入到网卡插入相应插槽里
  38.   mb.usepciCard(sc);     //组装者把网卡插入到声卡插入相应插槽里
  39.  }
  40. }
  41. 输出结果:
  42. NetCard is start
  43. NetCard is stop
  44. SoundCard is start
  45. SoundCard is Stop

大概在阐述下这段代码,首先我们要定义一个标准,这个标准是各种PCI卡共有的标准其包括start(),stop(),所以我们的网卡(NetworkCard),声卡(SoundCard)都要去实现这个接口。
有了PCI卡我们还要有一块主板,所以我们new一块主板出来响应各种PCI卡。当然我们还需要一个组装电脑的人来组装这个主板把不同的PCI卡插入主板上,这时我们就需要new一个组装者( Assembler),然后调用mb.usepciCard(nc);mb.usepciCard(sc);
这时传入到了MainBorard方法中我们看到其参数类型是PCI,表示一个总的类型,调用mb.usepciCard(nc)就会去自动响应网卡的方法
调用mb.usepciCard(sc);就去自动去响应声卡中的方法。这里就体现了其多态性
多态是在程序运行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法。

希望大家好好体会多态带来的用途。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值