---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、继承
1.当两个类具有公共属性和行为时,可以抽出一个父类,类似Bird 和Dog都是动物,如下
@interface Bird : NSObject
{
@public
int weight;
}
- (void)eat;
@end
@interface Bird : NSObject
{
@public
int weight;
}
- (void)eat;
@end
Dog类似,可以先定义一个父类
Animal,就像
@interface Animal : NSObject
{
@public
int weight;
}
- (void)eat;
@end
// Animal的定义
@implementation Animal
- (void)eat ;
@end
定义子类时:只需将NSObject替换为相应父类。
子类将会继承父类所有的属性和方法,子类还可以重写父类方法,因为子类访问过程是先访问子类有没有,如果子类没有就去访问父类,
子类不能与父类有相同的成员变量。
利用super可以调用父类的对象方法和类方法。父类被继承后仍然可以正常使用。
2.继承的好处:
继承像是将类之间的联系了起来,减少了代码的不必要的书写。但坏处就是耦合性强。
3.super的作用
直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
父类中的test类方法
+ (void)test
{
NSLog(@"Zoombie+test");
子类调用的super使用方式
+ (void)haha
{
[super test];
}
3.使用场合:子类重写父类的方法时想保留父类的一些行为
二、多态
没有继承就没有多态,没有多态就没有类丰富的变化。
多态展示了事物的多种形态,OC对象具有多态性。
如:
Person *p = [Student new];
p->age = 100;
[p walk];
Person是Student的父类,多态两边的类就是指不是同一类,将子类的对象赋值给父类指针,但是该对象必须子类父类共有,不能是子类特有的对象,这样父类的指针*p访问的会是子类的属性和方法,节省了代码,但是不具有子类特有的方法属性。
注意:如果子类在左边,父类在右边会报错,因为调用方法时会检测对象的真实形象
三 OC中的字符串使用
OC中的字符串最简单的创建方式
NSString *str = @"itcast";
char *name = "itcast";
NSLog(@"我在%@上课", str);
NSLog(@"%s", name);
四、分类
利用Cateagory分类可以给系统自带类扩充自己需要的方法,格式如下
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
类文件可以让多个人共同开发,实现团队合作。
注意:Category只能添加方法,不能添加变量。多个Category中实现了同名方法,只有最后一个参与编译的会生效,类似会覆盖的效果。
补充:类文件是类的补充扩展..并不是单独的类,所以不能定义新的变量,所以它不能初始化对象.
四、 +load和+initialize
1.+load 程序其董事会自动加载,不管有没有调用这个类。
2.+initialize当某个类被调用时,会自动调用+initialize方法,一个类只会调用一次。先调用父类,在调用子类.
如:
// 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
+ (void)load
{
NSLog(@"Person---load");
}
// 当第一次使用这个类的时候,就会调用一次+initialize方法
+ (void)initialize
{
NSLog(@"Person-initialize");
}
@end
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------