接口和抽象类

接口和抽象类可以使您创建组件交互的定义,通过接口,可以指定组件必须实现的方法,但不实际指定如何实现。抽象类使您可以创建行为的定义,同时提供用于继承类的的一些公共实现,对于在组件实现多态行为方面,接口和抽象类都是很有用的工具。

既然提到组件的多态性,就简单介绍一下,但本文并不把多态介绍作为重点。C++编程语言的作者Bjame Stroustrup认为,一种语言必须支持对象、类和继承这3个概念才能称得上面向对象的语言,但实际上面向对象的语言更普遍的认为是建立在封装、继承和多态性这三者之上,可见多态性在面向对象语言中的重要性。多态性在msdn上的定义是:多态性是类为方法(这些方法以相同的名称调用)提供不同实现方式的能力。多态性允许对类的某个方法进行调用而无需考虑该方法所提供的特定实现。实际上就我比较简洁的理解就是:允许老代码调用新代码的能力。实际上这也是面向对象设计的最大好处,即你不需要修改和破坏原有代码结构,就可以扩充和增强你原来代码的功能。对于初学者这样好像有点不可思议。但如果一个系统设计的充分好的话,他完全可以做到这一点。

可以有以下几种方式实现组件的多态性:

1.         接口的多态性:接口本质上是类如何响应的定义。

2.         继承的多态性:通过继承,类在基类中接收所以属性方法和事件。

3.         通过抽象类实现多态性:抽象类同时提供继承和接口的元素。抽象类本身不能实例化,它必须被继承。该类的部分或全部成员可能未实现,该实现由继承类提供。已实现的成员仍可被重写,并且继承类仍可以实现附加接口或其他功能

对于通过继承实现多态性,微软这样建议:“对于小规模的开发任务而言,这是一个功能强大的机制,但对于大规模的系统,通常证明会存在问题,过分强调继承驱动的多态性一般会导致资源大规模从编码转向设计,这对于缩短整个项目开发时间是没有帮助的。”

 

那么在特定的情况下,如何选择设计类型呢?

1.         如果预计要创建组件的多个版本,则创建抽象类,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有的继承类都会同步更新,另一方面接口一旦定义就不能更改。如果需要接口的新版本,则必须要创建新的接口。

2.         如果创建的功能要在大范围全异的对象间使用,则需要使用接口,抽象类主要用于关系密切的对象,而接口最适合为不相干的类提供通用的功能。

3.         如果设计小而简练的功能块,则使用接口。如果设计大的功能单元,则使用抽象类。

4.         如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值