最近看了张孝祥的JAVA教程,在看到多态这一块时感觉眼前一亮,觉得他这块的一个例子对多态的理解有很大的帮助。
相信每个人在学习多态时都会遇到一些问题,初学时不是很理解多态,不明白他到底有何用,我也一样对这很苦恼,不过慢慢还是对多态有了一些理解。今天把张孝祥这个多态的例子分享给大家
这个例子是一个关于PCI卡与主板相结合响应主板的问题
大家应该明白PCI卡是什么东西吧?就是主板上插的声卡,网卡,显卡等,在主板上我们可以看到一些PCI插槽,这些插槽对应着相应的PCI卡,只有插入正确才能极其才能正常响应
我们知道不同的PCI卡制造厂商生产PCI卡时要符合一个共同标准去制造,而不同的主板制造厂也要符合一个共同的标准去制造,只有符合一个标准PCI卡才能正确响应主板
所以我们可以利用下面的代码来模拟PCI卡与主板的结合
- interface PCI{ //定义一个接口,这里表示一个PCI标准
- void start(); //当启动时
- void stop(); //当停止时
- }
- class NetworkCard implements PCI{ //一块网卡实现了PCI标准
- public void start() { //启动时响应一个方法
- System.out.println("NetCard is start");
- }
- public void stop() { //关闭时响应一个方法
- System.out.println("NetCard is stop");
- }
- }
- class SoundCard implements PCI{ //一块声卡实现了PCI标准
- public void start() { //启动时响应一个方法
- System.out.println("SoundCard is start");
- }
- public void stop() { //关闭时响应一个方法
- System.out.println( "SoundCard is Stop");
- }
- }
- class MainBorar{ //定义一个主板类,但插入网卡或者声卡时响应其对应的方法
- void usepciCard(PCI p){ //但传来的是网卡的参数就调用网卡的方法,传来的是声卡的
- p.start(); //就调用声卡的方法,仔细体会这块
- p.stop();
- }
- }
- public class Assembler { //定义个组装者由组装电脑的负责把不同的PCI卡插入主板上
- public static void main(String[] args) {
- MainBorar mb = new MainBorar(); //组装者取一个主板来
- NetworkCard nc = new NetworkCard();//组装者取一个网卡来
- SoundCard sc = new SoundCard(); //组装者取一个声卡来
- mb.usepciCard(nc); //组装者把网卡插入到网卡插入相应插槽里
- mb.usepciCard(sc); //组装者把网卡插入到声卡插入相应插槽里
- }
- }
- 输出结果:
- NetCard is start
- NetCard is stop
- SoundCard is start
- 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);就去自动去响应声卡中的方法。这里就体现了其多态性
多态是在程序运行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法。
希望大家好好体会多态带来的用途。