2011-05-29 195 views
2

在Objective-C中,我希望有一个子类调用或调用父类的方法。正如在父母已经分配了孩子,孩子做了一些会调用父母方法的东西。像这样:子类调用父类的方法

//in the parent class 
childObject *newChild = [[childClass alloc] init]; 
[newChild doStuff]; 

//in the child class 
-(void)doStuff { 
    if (something happened) { 
     [parent respond]; 
    } 
} 

我怎么能这样做呢? (如果你能解释清楚,我将不胜感激)

+0

的可能的复制[HOWTO访问在父类中声明的方法是什么?] (http://stackoverflow.com/questions/5063484/howto-access-the-method-declared-in-the-parent-class) – moonman239 2016-11-29 01:31:02

回答

6

你可以为此使用委托:让childClass定义一个委托协议和一个符合该协议的委托属性。然后你的例子将改变到这样的事情:

// in the parent class 
childObject *newChild = [[childClass alloc] init]; 
newChild.delegate = self; 
[newChild doStuff]; 

// in the child class 
-(void)doStuff { 
    if (something happened) { 
     [self.delegate respond]; 
    } 
} 

有如何声明和使用一个委托协议,在这里一个例子:How do I set up a simple delegate to communicate between two view controllers?

3

没有什么可以解释的。

对于在这种情况下,你的关键字是super,这是很多像self,但它指的是什么self已经有它一直是自己的直接超类的成员使用:

// in the child class 
- (void)doStuff { 
    if (something happened) { 
    [super respond]; 
    } 
} 
+1

这是不对的 - 'super'是指对象的超类,而不是实例化的对象它。 – 2011-05-29 18:26:12

+1

@Simon Whitaker:他在问一个*孩子班*。当然不是正确的术语,但它是一个建议他想要与实例化对象交谈的飞跃。 – 2011-05-29 18:33:15

+2

并非如此 - 这正是他在他的问题中所说的。 “父母已经分配了孩子,孩子做了一些可以调用父母方法的东西。”同意,虽然这个术语很少使用。 – 2011-05-29 18:39:15