A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清秋 黑马帝   /  2011-11-17 13:33  /  1613 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 清秋 于 2011-11-21 09:49 编辑

day08视频中的多态主板的例子。
  1. /*
  2.         需求:
  3.         电脑运行实例
  4.         电脑运行依赖于主板
  5. */

  6. interface PCI
  7. {
  8.         public void open();
  9.         public void close();
  10. }

  11. class MainBoard
  12. {
  13.         public void run()
  14.         {
  15.                 System.out.println("maiboard run");
  16.         }
  17.         public void usePCI(PCI p)
  18.         {
  19.                 if ( p != null )
  20.                 {
  21.                          p.open();
  22.                         p.close();
  23.                 }
  24.         }
  25. }

  26. class NetCard implements PCI
  27. {
  28.         public void open()
  29.         {
  30.                 System.out.println("netcard open");
  31.         }
  32.         public void close()
  33.         {
  34.                 System.out.println("netcard close");
  35.         }
  36. }

  37. class SoundCard implements PCI
  38. {
  39.         public void open()
  40.         {
  41.                 System.out.println("soundcard open");
  42.         }
  43.         public void close()
  44.         {
  45.                 System.out.println("soundcard close");
  46.         }
  47. }


  48. class DuoTai5
  49. {
  50.         public static void main(String[] args)
  51.         {
  52.                 MainBoard mb = new MainBoard();
  53.                 mb.run();
  54.                 mb.usePCI(null);
  55.                 mb.usePCI(new NetCard());
  56.                 mb.usePCI(new SoundCard());
  57.         }
  58. }
复制代码
例子中用接口实现。
对接口和抽象有些模糊
不知道这两种方式有何区别。
抽象

  1. abstract class PCI
  2. {
  3.         public abstract void open();
  4.         public abstract void close();
  5. }

  6. class MainBoard
  7. {
  8.         public void run()
  9.         {
  10.                 System.out.println("maiboard run");
  11.         }
  12.         public void usePCI(PCI p)
  13.         {
  14.                 if ( p != null )
  15.                 {
  16.                          p.open();
  17.                         p.close();
  18.                 }
  19.         }
  20. }

  21. class NetCard extends PCI
  22. {
  23.         public void open()
  24.         {
  25.                 System.out.println("netcard open");
  26.         }
  27.         public void close()
  28.         {
  29.                 System.out.println("netcard close");
  30.         }
  31. }

  32. class SoundCard extends PCI
  33. {
  34.         public void open()
  35.         {
  36.                 System.out.println("soundcard open");
  37.         }
  38.         public void close()
  39.         {
  40.                 System.out.println("soundcard close");
  41.         }
  42. }


  43. class DuoTai5
  44. {
  45.         public static void main(String[] args)
  46.         {
  47.                 MainBoard mb = new MainBoard();
  48.                 mb.run();
  49.                 mb.usePCI(null);
  50.                 mb.usePCI(new NetCard());
  51.                 mb.usePCI(new SoundCard());
  52.         }
  53. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览
其实现在这个阶段没必要硬揪这两个的区别,等你学的深了,自然而然多久知道了,什么时候要定义接口,什么时候定义抽象方法
现在你就可以这么认为:接口是一种特殊的抽象类,因为接口中的方法都是抽象方法,而抽象类中可以定义实体方法。
学东西要灵活!!!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在你所定义的抽象类中所有的方法都是抽象的,跟接口几乎要一样了,而类要继承你编写的抽象类,只能继承一个,而接口可以实现多个,你所写的我感觉有点巧合,这样看问题确实看不出来有啥区别了,多练习,希望你早日明白

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马