黑马程序员技术交流社区
标题:
关于接口的方法的调用
[打印本页]
作者:
杨翔
时间:
2013-1-7 17:27
标题:
关于接口的方法的调用
本帖最后由 杨翔 于 2013-1-15 22:26 编辑
这个是教学视频里的一段代码,有个地方不太明白,pci是个接口不能够实例对象,为什么在代码中
把NetCard的匿名对象传给 usePCI 函数,就可以调用PCI中的方法了呢,我目前的理解这是因为多态,因为
p实际指向的是NetCard的对象,而NetCard实现了PCI的方法,但是老是感觉有些空泛,谁能帮我详细讲一下?
最好是从内存结构方面?
interface PCI
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("mainboard run ");
}
public void usePCI(PCI p)
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
}
}
class Test1
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(new NetCard());
}
}
复制代码
作者:
黄锦成
时间:
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