俗话说,听说不等于明白,明白不等于会用。对于接口,恐怕对于很多人都一提就知,一看就会,一用就蒙。尤其是搞不明白它和虚类继承之间的区别。
这里给大家一个比较形象点的例子来说明一下它们的区别(看完再扔西红柿,谢谢)
人以食为天嘛,这里就拿这个吃来做例子
一个人可以吃很多东西,主食、水果、蔬菜等等,这些都是可以吃的食物,每种食物都有相应的吃法,所以对于一个人类和食物的定义暂时如下:
人 = class
{
public eat( Tfood food)
{
food.doEat; //开始吃
}
}
食物 = class Abstract
{
public virtual doEat(); //派生类实现
}
主食 = class(食物 )
{
public override doEat()
{
//用相应吃法开吃
}
}
水果 = class(食物 )
{
public override doEat()
{
//用相应吃法开吃
}
蔬菜 = class(食物 )
{
public override doEat()
{
//用相应吃法开吃
}
这样,如果一个人要吃东西,就要这样实现:
人类 人 = new 人类();
水果 一个水果 = new 水果();
.....
人.eat(一个水果 );
OK,使用虚类的多态,可以通过继承食物类来让人吃任何食物。
但是,再往下,这个人生病了,需要吃药,那这个方法怎么来实现,同样让药来继承自食物??...等等,估计除了病秧子,没人拿药来当作食物吧,原来的方法没法用了。
也许有人会想,可以在食物类上再抽象一个可食用类吧,嗯,能这样想很好,于是你抽象出来另一个上层类。
好,我们继续,这人吧,是社会化动物,既然如此,那免不了跟人交流,那么也免不了吃亏,呵呵,问题来了,这个亏是个什么可食用类呢?有核没核,有籽没籽?实在难说,我们也不会为此再为可食用类构造更高一层的抽象类吧?如果这样无休止的抽象下去,我想你快成盘古了(持续2秒的笑)
OK,说到这,也应该让我们的救世主出场了。
接口,我想大家对它可以说是耳熟能详了,它的优点我们都几乎能倒背如流。那么好,让我们来看看它真正的威力。
我们把上面的例子改一下:
我们不用食物类作为虚类,而是定义一个食用接口ICanEat,其中包含了一个吃法doEat
ICanEat = Interface
{
doEat();
}
然后让所有能够让人吃的对象都实现这个接口(代码略)
最后把人类中吃东西的方法也加以修改:
public eat( ICanEat ob)
{
ob.doEat; //开始吃
}
好的,到现在,人可以吃任何继承自ICanEat接口的对象了,只要提供吃法,他就可以尽情享用。
到这,大家应该看出接口相比虚类继承的优势了
1、轻型继承和多种实现继承。接口可以不附带任何与之无关的实现(虚类继承的子类带有父类的所有实现),而且接口可以实现多继承(类的多继承在DELPHI、JAVA和C#里是不允许的)。
2、接口可以让毫不相干的类组合到一起,从而实现同种目的
3、接口隐藏了具体的实现,只要结果,不要过程
分享到:
相关推荐
只有通过大量的实践,我们才能真正掌握Python自动化测试和接口自动化测试的技能。 知识四:学习资源的获取 学习Python自动化测试和接口自动化测试并不困难,因为互联网上有大量的学习资源。我们可以从一些优秀的...
- **多主控制**:CAN总线允许多个节点同时发送数据,通过仲裁机制决定哪个节点的数据优先传输,实现了真正的多主操作模式。 - **灵活的数据传输**:支持多种帧格式,包括数据帧、远程帧、错误帧和过载帧,适应不同的...
USB 2.0接口是当前计算机...通过检查主板芯片组、操作系统、设备和线缆,可以确保USB 2.0接口真正发挥出它的高效传输能力。在购买和使用USB设备时,对这些要点的关注和确认将有助于提高工作效率并避免不必要的延误。
总之,RS-485接口凭借其优秀的电气特性、稳定的数据传输性能和强大的网络连接能力,在工业通信领域发挥着重要作用。了解和掌握RS-485接口的基础知识,有助于工程师在设计和维护工业自动化系统时做出更合适的技术选择...
这些信号线在实际应用中发挥着至关重要的作用,例如DSR和DTR信号线的有效状态表示设备本身可被使用,但并不意味着通信链路已准备就绪,真正的通信开始还需要通过其他信号线进行确认。 #### 六、总结 综上所述,...
"智能仪器人机接口" 智能仪器人机接口是智能仪器设计的关键技术之一。人机交互功能即用户与仪器交换信息的功能,...只有通过对人机接口技术的正确理解和应用,智能仪器才能真正发挥其功能,提高用户体验和工作效率。
总的来说,ATS单片机接口的扩展是嵌入式系统设计中的核心技能,通过合理选用和设计接口,可以充分发挥单片机的功能,连接各种外部设备,构建出复杂的嵌入式系统。学习这个主题对于理解和实践嵌入式系统设计至关重要...
JTAG接口的功能并不仅限于硬件层面,其真正的能力发挥需要软件的支持。例如,通过JTAG接口可以实现程序的下载到RAM中运行。不过,在实际操作中,需要根据SoC的数据手册来配置RAM的相关寄存器,包括基地址、总线宽度...
* 保护虚地址方式:真正发挥处理器潜能的一种工作方式,保护每个任务顺利执行。 * 虚拟86方式:模拟多个8086微处理器同时工作。 * 系统管理方式:为实现特定功能及系统安全提供的一种工作方式,SMM的功能主要包括...
在IT行业中,自动化测试是提高效率、确保软件质量的关键手段之一。Python因其语法简洁、库丰富,成为自动化测试领域中的热门选择。...在实践中,不断探索和优化,才能真正发挥Python和递归在接口自动化测试中的潜力。
超频是让CPU超常发挥的一种常见方法。通过提高CPU的时钟频率,可以在一定程度上提升其运算速度。但请注意,超频可能导致设备过热,增加功耗,甚至损坏硬件。因此,超频前要确保散热系统足够强大,并使用专业的软件如...
【脑-机接口技术概述】 脑-机接口(Brain-Computer Interface, BCI)是一种创新技术,它允许大脑与外部设备直接沟通,绕过...随着技术的不断进步,未来BCI-VR将在多个领域发挥重要作用,对人们的生活产生深远影响。
在人机交互设计中,键盘和LED数码显示是常见的输入输出设备,它们在数据输入、命令控制等方面发挥着重要作用。本例中,采用了一个由多个按键组成的小型键盘和若干共阴极LED数码管,通过两片74HC595芯片实现对LED...
尽管这两种接口的数据传速率达到了480Mpbs/400Mbps,但它们并不能真正发挥硬盘等设备的最大潜力。这是因为USB2.0或IEEE1394移动硬盘均必须使用桥接芯片,才能实现接口的转换,这种连接方式无疑会大大影响设备的性能...
Spring的AOP(Aspect-Oriented Programming,面向切面编程)功能在SSH框架中也发挥了重要作用。AOP允许开发者定义横切关注点,如事务管理,然后将这些关注点与业务逻辑分离。在SSH中,Spring可以自动处理事务的开启...
MySQL 是一款真正的多用户、多线程 SQL 数据库服务器。SQL 作为一种标准化的数据库语言,使得数据的存储、更新和检索变得更加简单高效。MySQL 采用了客户端/服务器架构,包括服务器守护进程 `mysqld` 以及多个客户端...
嵌入式系统是现代电子设备的核心,而ARM技术则是嵌入式系统中广泛采用的处理器架构。在不断提升的通信需求和高速数据传输的背景下,...随着技术的不断发展,M-LVDS将继续在推动高速通信和数据处理领域发挥重要作用。
裸机是指没有安装任何软件的计算机,只有当安装了操作系统和其他必要软件后,硬件才能真正发挥作用,提供完整的服务。 总结来说,模块计算机的硬软件系统是相互依赖的。硬件是计算机的基础结构,而软件则赋予其智能...