实现运行时多态和继承

Abh*_*nav 2 iphone cocoa objective-c ios

在目标C中,java中接口的等价概念是什么.我想创建一个接口并定义一些公共变量和方法,这些变量和方法将由从我的接口继承的许多类共享.当外面的任何类想要使用子类时,它将获得我的接口的引用对象,该对象将指向正确的子类.

如何在Objective C中实现这一目标?

DVK*_*DVK 5

Java接口的Objective C等效称为" 协议 ".

这里也可以找到一个小介绍,如果你想要一个完整的参考,它就在Apple


Lan*_*opp 5

在Objective-C中,您可以通过使用协议来实现此目的.协议基本上是Java中接口的前身,因此大多数行为应该是自然而然的.

协议声明如下所示:

@protocol Foo
-(void) foo;
-(int) boo: (int) arg;
@end
Run Code Online (Sandbox Code Playgroud)

它可以由一个类实现.在下面的例子中,你会说MyClass符合Foo协议.

@interface MyClass <Foo>
{
}

@end

@implementation MyClass

-(void) foo {
    //do something
}
-(int) boo: (int) arg {
    //do something else
    return arg;
}

@end
Run Code Online (Sandbox Code Playgroud)

最后,你可以像这样传递它们:

-(void) someMethod: (id<Foo>) arg;
Run Code Online (Sandbox Code Playgroud)

如果你需要更具体的对象,它们也可以像这样使用:

-(void) someMethod: (NSObject<Foo> *) arg;
Run Code Online (Sandbox Code Playgroud)