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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hubby 中级黑马   /  2013-11-10 11:35  /  1359 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才复习到接口时,看毕老师视频的电脑主板实例讲解那块,先定义一个interface接口,然后主板class里面写函数方法运行接口,然后声卡,网卡什么的实现了接口,在主函数创建主板对象,调用主板运行接口函数方法。把声卡和网卡当接口类型参数放进去----以上是背景。我想问的是:既然是声卡网卡,肯定还有自己的函数方法啊,不仅仅只会覆盖接口方法吧?当主函数中主板对象运行接口函数方法时,怎么运行声卡网卡的独有方法啊?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 魏-玉-彪 于 2013-11-10 13:02 编辑

     在JAVA中一个类可以同时实现多个接口,并且同时继承一个类,(抽象不抽象都行),所以自己的方法随便加,但是实现接口就一定要重写接口中的方法,因为接口中的方法没有方法体,没有具体实现,实现他的类不重写方法体就没有意义了,多此一举了, 那些额外的方法按正常方式调用
回复 使用道具 举报
比如主板提供了声卡接口,
那对于主板来说,我只会调用我的声卡接口定义的方法(相当于: 声卡 ac = new 实现的声卡())
你做出来的声卡有什么其他的方法对我来说意义不大,
因为主板程序对声卡的调用是基于主板定义的接口的方法实现的,
声卡自己的方法需要通过安装声卡驱动获得
回复 使用道具 举报
  1. /*
  2. 多态主板的实例
  3. */
  4. //建立接口
  5. interface PCI
  6. {
  7.         void start();
  8.         void stop();
  9. }

  10. //网卡
  11. class NetCard implements PCI
  12. {
  13.         public void start(){
  14.                 System.out.println("上网了");
  15.         }
  16.         public void stop()
  17.         {
  18.                 System.out.println("断网了");
  19.         }
  20. }

  21. //声卡
  22. class SoundCard implements PCI
  23. {
  24.         public void start(){
  25.                 System.out.println("有声音了");
  26.         }
  27.         public void stop()
  28.         {
  29.                 System.out.println("没声音了");
  30.         }
  31.         //假设声卡有特殊方法
  32.         public void show(){
  33.                 System.out.println("放音乐");
  34.         }
  35. }

  36. //主板
  37. class MainBoard
  38. {
  39.         public void usePCICard(PCI p){
  40.                 p.start();
  41.                 p.stop();
  42.         }
  43. }

  44. class  InterfaceDemo2
  45. {
  46.         public static void main(String[] args)
  47.         {
  48.                 MainBoard b = new MainBoard();
  49.                 b.usePCICard(new NetCard());
  50.                 b.usePCICard(new SoundCard());
  51.                 //主板类中是没有声卡的特殊方法的,所以只能建声卡对象调用声卡fangfa;
  52.         SoundCard s = new SoundCard();
  53.                 s.show();
  54.         }
  55. }
复制代码
就像楼上说的一样,建主板对象,声卡的特殊方法没有意义,子类的特殊方法,通过子类对象调用。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
零下五度的水 发表于 2013-11-10 13:06
比如主板提供了声卡接口,
那对于主板来说,我只会调用我的声卡接口定义的方法(相当于: 声卡 ac = new 实 ...

就是说如果使用接口的话,只需要复写接口中的抽象方法就完了,加的多的方法主板不需要是吧?
回复 使用道具 举报
接口中的方法是这些类的公共部分,继承接口还可以有其他的方法。这样提高了扩展性。
对于怎么实现:
  1. class MainBoard
  2. {
  3.         public void usePCICard(PCI p){
  4.                 p.start();
  5.                 p.stop();
  6.         }
  7. }
  8. class  InterfaceDemo2
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 MainBoard b = new MainBoard();
  13.                 b.usePCICard(new NetCard());
  14.                 b.usePCICard(new SoundCard());
  15.                 SoundCard s = new SoundCard();
  16.                 s.show();
  17.         }
  18. }
复制代码
可以创建一个实现类,传入你要是参数即可。
你可以在看看看视频理解下。应该可以的。
回复 使用道具 举报
我们还是得要明确接口的由来,为什么会有接口,接口的由来 是弥补单继承的局限性。当我们要继承多个类时,就可以将这些类定义成接口,然后覆盖接口中的方法就行了。
回复 使用道具 举报
从声卡来看的话,是这样的,这种是属于单功能接口实现,
然后操作系统直接将这些实现类通过传递参数的方式调用,
这也是单功能接口实现类的宿命

从面向对象的角度来说,一般类很少自己定义方法,
比如声卡,假如有两个主板厂家,他们定义的接口不一样,但也不冲突(没有同名同参方法)
你想让你的声卡同时支持这两个厂家的主板接口,又不想做两种不同的产品,
那就可以让你的声卡同时实现这两个接口,
到时某一主板用你的声卡的时候,支持另一主板的方法会被完全闲置
回复 使用道具 举报
hubby 中级黑马 2013-11-10 17:38:02
9#
零下五度的水 发表于 2013-11-10 15:18
从声卡来看的话,是这样的,这种是属于单功能接口实现,
然后操作系统直接将这些实现类通过传递参数的方式 ...

嗯,顺便问一下我昨天的问题,那个螺旋圈数是怎么定义出来是2m-1/2和2n/2的?
回复 使用道具 举报
这种问题的话一般从简单的例子入手,比如3行3列,3行4列,4行3列,4行4列。。。
然后找规律,照我的水平估计不容易说明白,
另外,我楼下的那个代码真心写的很棒,看他的那个然后忽略我那个吧,
我那个是用纯数学方法实现的,可读性比较低
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马