基本上我有一个Parent超类,即MAMMAL。哺乳动物默认扩展UIImageview。现在我有虎类,它反过来扩展了MAMMAL类,而哺乳动物类则是母乳喂养方法。
在我的哺乳动物课上,我宣布使用母乳喂养方法。
现在,我希望能够做一些事情,例如添加一个动物列表,这些动物可以扩展哺乳动物,并拥有自己的母乳喂养实施,循环播放和阵列,然后施放给哺乳动物并做[哺乳期母乳喂养宝宝]。
我希望每只动物都能使用自己的母乳喂养方法,因为它们都覆盖了它,但我的问题是它会从哺乳动物那里调用母乳喂养。如果我在那里宣布它。
在java中,我可以使用接口,也可以只使用抽象类的抽象类,并使用不同的实现覆盖方法。
这有意义吗?我的问题是,如果我不在哺乳动物中省略哺乳宝宝的方法,那么它将在哺乳动物中称为哺乳宝宝方法。如果我在哺乳动物中省略了母乳喂养方法。该课程将是黄色的警告说我没有正确实现mammal.h类。如果我这样做,就会调用动物的母乳喂养方法。我应该在这里使用协议,但据我所知,协议与java中的接口不同。
我不知道它是否有意义,但无论如何都要感谢。
答案 0 :(得分:5)
以下情景:
- (void)method;
- (void)method { NSLog(@"Mammal"); }
@class Monkey : Mammal
- (void)method { [super method]; NSLog(@"Monkey"); }
Mammal *monkey = [[Monkey alloc] init]; [monkey method];
应该屈服:
哺乳动物
猴
更新:当然,如果您愿意,可以删除对[super method]
的通话。只是展示了可能性。
答案 1 :(得分:2)
Objective-C动态解析所有内容,因此它没有抽象基类或接口。最接近抽象方法的是编写一个抛出异常的默认实现(在父类中)。
@implementation Mammal
- (void)breastfeedBaby
{
[NSException raise:@"MethodNotImplemented"
format:@"Class %@ failed to implement required method %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd)];
}
@end
在编译时捕获缺少的方法会很好,但在动态类型的语言中这是不可能的。
答案 2 :(得分:0)
即使你将一个对象转换为一个MAMMAL,它仍然会为它的子类调用-breastfeedbaby
方法。这是因为Objective-C使用消息发送。