黑马程序员技术交流社区

标题: 关于接口的方法的调用 [打印本页]

作者: 杨翔    时间: 2013-1-7 17:27
标题: 关于接口的方法的调用
本帖最后由 杨翔 于 2013-1-15 22:26 编辑

这个是教学视频里的一段代码,有个地方不太明白,pci是个接口不能够实例对象,为什么在代码中
把NetCard的匿名对象传给 usePCI 函数,就可以调用PCI中的方法了呢,我目前的理解这是因为多态,因为
p实际指向的是NetCard的对象,而NetCard实现了PCI的方法,但是老是感觉有些空泛,谁能帮我详细讲一下?
最好是从内存结构方面?
  1. interface PCI
  2. {
  3.         public void open();
  4.         public void close();
  5. }

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

  22. class NetCard implements PCI

  23. {
  24.         public void open()
  25.         {
  26.                 System.out.println("netcard open");
  27.         }
  28.         public void close()
  29.         {
  30.                 System.out.println("netcard close");
  31.         }
  32. }

  33. class Test1
  34. {
  35.         public static void main(String[] args)
  36.         {
  37.                 MainBoard mb = new MainBoard();
  38.                 mb.run();
  39.                 mb.usePCI(new NetCard());
  40.                
  41.                
  42.         }
  43. }
复制代码

作者: 黄锦成    时间: 2013-1-7 19:33
MainBoard mb = new MainBoard();
mb.run();

mb.usePCI(new NetCard());
上面这一句代码可以拆分开来
PCI pci = new NetCard();//因为NetCard实现了PCI接口,接口型引用指向了接口实现类对象
mb.usePCI(pci);

多态在面向对象中很重要,一时间也不是很容易理解,你可以把关于多态的视频多看几次

作者: 熊永标    时间: 2013-1-7 19:58
多态,即是一个对象,两种状态,java在编译时,只检察类型对不对,类型对了编译通过,类型不匹配,编译失败。你上面代码中,当程序在编译时,java虚拟机会对PCI的类型进行检察,检察到方法调用时,就对PCI接口验证,发现接口上有调用方法的签名,所以虚拟机编译通过。当程序在运行时,才真正根据对象的引用地址,找到了现实类,调用其中的方法,如查此时找不到对应的方法,那就抛出ClassCastException
作者: 杨翔    时间: 2013-1-7 20:51
{:soso_e100:}多谢楼上各位指点
作者: 何竹冬    时间: 2013-1-7 22:29
面向接口编程
方法接受一个接口类型的对象,也就是实现了这个接口的对象。
在调用这个类中的方法,也就是接口回调。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2