多态
1、没有继承就没有多态
2、代码体现:父类类型的指针指向子类对象
类的创建:
#import <Foundation/Foundation.h> // 动物
@interface Animal : NSObject
- (void)eat;
@end @implementation Animal
- (void)eat {
NSLog(@"Animal-吃东西...");
}
@end // 狗
@interface Dog : Animal
- (void)run;
@end @implementation Dog - (void)eat {
NSLog(@"Dog-吃东西...");
}
@end // 猫
@interface Cat : Animal
@end @implementation Cat
- (void)eat {
NSLog(@"Cat-吃东西...");
}
@end
多态的实现:
int main() {
// 多态:父类指针指向子类对象
Animal *a = [Dog new]; // 调用方法时会动态检测对象的真实形象
[a eat]; return ;
}
系统在调用方法时,会动态检测对象的真实形象
3.好处:如果函数/方法参数中使用的父类类型,可以传入父类、子类对象,用于整合相似的函数
4.局限性
父类类型的指针变量 不能 直接调用子类特有的方法,必须强转为子类类型后,才能直接调用。虽然能够成功,但是编程规范不提倡
NSString
#import <Foundation/Foundation.h> int main() { NSString *str = @"itcast";
NSLog(@"%@", str);// %@ 是NSString类型的占位符 int age = ;
int no = ; NSString *name = @"哈哈jack";
int size = [name length]; // length方法计算的是字数 NSLog(@"%d", size); // 创建OC字符串的另一种方式
NSString *newStr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@", age, no, name]; //stringWithFormat方法是转化字符串的格式 NSLog(@"%@", newStr);
NSLog(@"%ld", [newStr length]); NSLog(@"My age is %d and no is %d and name is %@", age, no, name); return ;
}
%@ 是所有对象类型的占位符,也是NSString类型的占位符
length方法是NSString中的一个对象方法( - ),主要用于计算字符串的字数
stringWithFormat方法是NSString中的一个类方法( + ),主要是转换字符串的格式,用于创建OC字符串