如果没有接口,世界一定不太平。
不同编程语言的类接口
- PHP: interface指代接口, 用 implements 实现接口。
- ObjC 用协议protocol实现接口,@interface标志指代的是类。
- Kotlin/仓颉 interface代表类接口,仓颉比较特殊,用 <: 代表继承接口, 如果继承多个接口用 & 分隔。
接口实例化
- 接口是不可实例化的。
可选的接口函数
- ObjC 为协议protocol提供了@required和@optional两种修饰,前者代表继承此协议必须实现的方法,后者代表可选实现。
接口继承接口
- ObjC 协议protocol可以继承另一个protocol.
- Kotlin/仓颉 等语言也允许一个接口继承另一个接口,也可以继承多个接口。
判断实现接口与否
- ObjC 提供了 conformsToProtocol 方法检测一个类是否实现此协议。
正式协议和非正式协议
- ObjC @protocol 是正式协议,早期设计中,还存在利用分类做非正式协议,尽管不受编译器约束,对应的协议也无需继承者实现,显得很灵活,在目前的开发中已经逐渐淘汰非正式协议。
接口的"属性"
- 仓颉 接口支持属性,即继承接口的类可以实现属性。
接口的默认实现
- 仓颉 支持为接口成员提供默认实现。这样,继承接口的类可以不实现此接口成员,对应成员会调用到接口的默认实现。