Head First C# 中文版 图文皆译 第七章 接口和抽象类 page254

来源:互联网 发布:男士商务包 知乎 编辑:程序博客网 时间:2024/05/20 06:22

接口要求类必须实现某些方法、属性


一个类只可以继承自一个类。所以如果需要一种蜜蜂即会做StingPatrol的工作又会做NectarCollector的工作的时候,给这两个类分别创建一个子类是不行的。


蜂后的DefendTheHive()(保护蜂巢)方法只可以让StingPatrol对象去保护蜂巢。蜂后希望训练别的蜜蜂让它们也会用毒刺蜇人,但是蜂后无法命令别的蜜蜂去保护蜂窝:


 

NectarCollector对象懂得如何采集花粉,StingPatrol对象懂得如何防护蜂巢。即使蜂后可以通过给NectarCollector添加SharpenStinger()和LookForEnemies()方法来让花粉采集者学会防护蜂巢,但是蜂后还是无法把NectarCollector作为参数传入DefendTheHive()方法。或许蜂后可以用两个各版本的方法:


 

但是这个解决方法并不好。这两个方法几乎是一样的,它们都要都要被传入的参数的相同的方法。这两个方法唯一区别就是参数类型不同。你早就知道维护两个相同的方法是多么麻烦了。幸运的是,C#提供了接口来处理这种情况。接口定义其实现类必须实现的方法。接口要求实现它的类必须包含它定义的方法,否则,编译器将会报错。实现类可以直接编码这些方法,或者从父类继承来也可以,接口并不关心这一点。只要编译的时候可以找到这些方法就可以了。

接口要求其实现类实现接口中定义的所有方法和属性,否则,编译器将会报错。