首页 理论教育 协议继承及其实现要求

协议继承及其实现要求

时间:2023-06-23 理论教育 版权反馈
【摘要】:答案是可以的,但协议继承比类的继承要求更多一些。如果子协议继承父协议,那么满足子协议的类型,一定也要实现其父协议中要求的属性和方法,这就是协议继承的设计理念。开发者可以根据示例学习协议的继承:动手写8.1.4 InheritProtocol控制台输出如下:控制台输出如下:本例中声明了两个协议,一个FatherProtocol,一个ChildProtocol。协议的继承是一个强大的功能,但是会产生不必要的冗余代码。

协议继承及其实现要求

类可以继承,那么协议是不是也可以继承呢?答案是可以的,但协议继承比类的继承要求更多一些。子类继承父类时可以享有父类所有已经实现的属性和方法,说明子类什么都可以做,但是协议不同。如果子协议继承父协议,那么满足子协议的类型,一定也要实现其父协议中要求的属性和方法,这就是协议继承的设计理念。开发者可以根据示例学习协议的继承:

动手写8.1.4 InheritProtocol

控制台输出如下:

控制台输出如下:

本例中声明了两个协议,一个FatherProtocol,一个ChildProtocol。其中ChildProtocol继承自FatherProtocol,前者需要提供father属性,后者需要提供child属性。接着声明了结构体Child满足ChildProtocol协议,那么Child类型既要提供father属性,也要提供child属性。然后定义printChild函数,指定其传入参数需要满足FatherProtocol协议,函数负责打印传入参数的child属性。(www.xing528.com)

协议、结构体、函数都声明了之后,创建一个Child的实例赋值变量child,调用printChild函数打印变量的child属性,调用print函数直接打印变量的father属性。这时,我们会发现,如果一个类型满足某个协议的子协议,那么这个类型也是满足某个协议的。就像本例中的Child结构体,通过满足ChildProtocol协议隐式地满足了FatherProtocol协议。协议的继承是一个强大的功能,但是会产生不必要的冗余代码。比如本例中,Child结构体不一定需要child属性,但是隐式满足FatherProtocol协议之后,就需要提供child属性。在iOS应用开发中,推荐开发者选择组合的方式进行代码的构建。

本例中声明了两个协议,一个FatherProtocol,一个ChildProtocol。其中ChildProtocol继承自FatherProtocol,前者需要提供father属性,后者需要提供child属性。接着声明了结构体Child满足ChildProtocol协议,那么Child类型既要提供father属性,也要提供child属性。然后定义printChild函数,指定其传入参数需要满足FatherProtocol协议,函数负责打印传入参数的child属性。

协议、结构体、函数都声明了之后,创建一个Child的实例赋值给变量child,调用printChild函数打印变量的child属性,调用print函数直接打印变量的father属性。这时,我们会发现,如果一个类型满足某个协议的子协议,那么这个类型也是满足某个协议的。就像本例中的Child结构体,通过满足ChildProtocol协议隐式地满足了FatherProtocol协议。协议的继承是一个强大的功能,但是会产生不必要的冗余代码。比如本例中,Child结构体不一定需要child属性,但是隐式满足FatherProtocol协议之后,就需要提供child属性。在iOS应用开发中,推荐开发者选择组合的方式进行代码的构建。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈