我有一种感觉,这将是一个非常快速的答案。我正在上 Paul Hegarty 的斯坦福 iOS 开发课程,他提到了选角。我对 Java 有一些经验,但没有遇到过强制转换,所以我想这也可能是关于强制转换的一般问题。我似乎无法在网上找到简洁的解释。他给出的代码是:
@interface Vehicle
- (void)move;
@end
@interface Ship : Vehicle
- (void)shoot;
@end
Ship *s = [[Ship alloc] init];
[s shoot];
[s move];
Vehicle *v = s;
[v shoot];
id obj = ...;
[obj shoot];
[obj someMethodNameThatNoObjectAnywhereRespondsTo];
// I understand up to this far, but it's the casting I'm having difficulty with
NSString *(hello) = @"hello";
[hello shoot];
Ship *helloShip = (Ship *)hello;
[helloShip shoot];
所以在第一行,他创建了一个指向 NSString 的指针,叫做 hello。在第二行中,他调用了 hello 的 shoot 方法,它是一个 NSString,但该方法不存在,因此无法正常工作。在第三行中,他创建了一个指向名为 helloShip 的 Ship 对象的指针,并将其设置为等于什么?将 NSString 指针转换(转换?)为船舶指针?如果是这样,为什么呼叫射击会失败?