简单的答案是协议。
另一点是,据说ObjectC中的所有方法都是虚拟的,所以不需要在ObjC中说虚拟。
我发现很难理解这个概念。
有任何意见可以更明确地解决这个问题吗?
感谢您的评论。
答案 0 :(得分:13)
简单的答案是协议。
简单但错误。协议是接口规范。它是一个对象必须(暂时忽略@optional
关键字)响应的消息集合。
术语“虚拟功能”在Objective-C中没有直接的对应物。在Objective-C中,您不会在对象上调用函数,而是向它们发送消息。然后,对象本身决定如何响应消息,通常是通过查找其类对象中的消息,查找关联的方法并调用它。请注意,这一切都发生在运行时,而不是编译时。
消息(或“选择器”给它们的技术术语)和方法之间的映射完全由@implementation
构建。 @interface
中的方法声明仅用于向编译器提供所需的信息,以警告您可能忘记了方法实现。它只是一个警告,因为直到运行时才能判断对象是否确实对消息做出了响应。例如,其他人可以将类别添加到为缺少方法提供实现的现有类,或者类可以覆盖forwardingTargetForSelector:
以转发它不响应其他地方的消息。
答案 1 :(得分:2)
Objective-C中对象的方法不是虚函数,它们是真正的函数。
我不同意,Obj-C中的方法并不像人们期望的那样真实。它们的行为就像C ++中的虚函数一样,除了你不能在Objective-C中创建一个'纯虚拟'函数。
干杯, Raxit