![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
2
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
3
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
4
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
5
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
6
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
7
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
8
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
9
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
10
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
11
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
12
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
13
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
14
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
15
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
16
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
2
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
3
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
4
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
5
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
6
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
7
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
8
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
9
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
10
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
11
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
12
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
13
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
14
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
15
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
16
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
17
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
同样是抽象类,但修改后的类,就不再是纯抽象类了。纯抽象的类,我们要求是没有构造函数,没有任何的非抽象成员,所有成员的访问修饰都是public的,这样我们有了一个新的名词:接口interface。
现了解一下接口的定义要求
接口就是一个纯抽象类(所以接口是引用类型),接口可以包含方法、属性、事件和索引器,实现该接口的类或结构必须实现这些成员。
相比起抽象类,接口有以下特征
不需要声明接口为抽象或虚拟(本来就是)
接口不允许有构造函数(纯抽象了,根本不需要构造)
接口不允许有析构函数(本来无构造,何需有析构)
接口的所有成员都是抽象的(纯抽象类嘛)
接口只可以从接口继承(因为只有接口可以保证使纯虚的,如果从抽象类继承,不能保证抽象类中可能存在非抽象的成员)
接口成员不允许有任何修饰(默认就是public的,也只有是public的)
一个类或结构可以实现多个接口
那为什么要接口呢?
我们设想一个场景,假设我要写一个模拟角色的游戏,每个玩家都可以拥有多个角色(职业),如果有一个人其职业是医生,但同时他也是研究生,在学校带课,但又在攻读博士,同时呢,由于工作出色,担任了科室主任,在回家的路上又去了超市。
那我们可以观察到,这个人实现了的角色有:医生、学生、讲师、领导、顾客。那类怎么描述实现呢?用继承?
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
2
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
3
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
4
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
5
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
6
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
7
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
8
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
9
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
10
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
11
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
12
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
13
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
14
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
15
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
16
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
17
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
18
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
19
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
20
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
21
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
22
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
23
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
24
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
25
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
26
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
27
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
28
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
29
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
30
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
31
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
32
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
33
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
34
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
35
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
36
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
37
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
38
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
39
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
40
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
41
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
42
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
43
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/0e206446dbe64e75a7768cc56511f4d2.gif)
44
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
45
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467972/20241018/240eba2d9c5149deaa4077047367ccc2.gif)
46
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
如果你还有一点点面向对象的理智的话,就知道这个非常非常的错误的设计。不但类的结构非常的臃肿,还难以代码重用。
所以我们将代码改为使用接口来实现。
我们把job角色定义为接口,而不是类
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
2
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
3
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
4
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
5
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
6
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
7
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
8
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
9
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
10
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
11
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
12
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
13
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
14
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
15
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
16
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
17
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
18
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
19
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
20
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
21
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
22
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
23
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
这样Person 类就可以实现(继承)多个接口
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467966/20241018/ecabb2e964754d4291649312febcd80a.gif)
2
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/8d3f73eb63744b1fafb47d310e94fcfd.gif)
3
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
4
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
5
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
6
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
7
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
8
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467976/20241018/d12faab94d634b2889bde143f722ab4b.gif)
21
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
22
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467976/20241018/d12faab94d634b2889bde143f722ab4b.gif)
34
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
35
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467976/20241018/d12faab94d634b2889bde143f722ab4b.gif)
42
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
43
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
44
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/c3518241843f4f66a5cc93249d51ff6c.gif)
45
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467976/20241018/d12faab94d634b2889bde143f722ab4b.gif)
58
![](https://ucc.alicdn.com/gtdqzn4uqwgsg/developer-article467970/20241018/1ee78ba81a384d4a834b1b3397212802.gif)
注意,IConsumer 成员采用的是显式实现。
标准实现的模型是:public 接口成员[返回值 名字 参数] {}
显式实现的模型是:没有访问修饰符 接口名称.接口成员[返回值 名字 参数] {}
显式实现的接口成员没有访问修饰符,也就意味着显式实现的成员感觉上是私有的,不能被访问。那这样的实现有什么意思呢?
请看下篇:我,只关心接口。
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806264