self
是什么?
关键字
有什么用?
可以在类中调用方法/属性:
1.可以在类的方法中调用类的方法,不可以调用对象的方法.但不可以访问属性
2.在对象的方法里调用对象的方法,不可以调用类的方法,可以访问属性.
怎么用?
[self 方法名];
self->属性名;
#import <foundation/Foundation.h>
@interface Dog : NSObject{
int _Leg;
}
+(void)test;
+(void)test2;
-(void)test3;
-(void)test4;
@end
@implementation Dog
+(void)test{
// self->Leg=100; 不能在类的方法中访问属性
NSLog(@"haha--");
}
+(void)test2{
[self test];//在类的方法中调用类的方法.
// [self test3];//错误:,不可以在类的方法中调用对象的方法
}
-(void)test3{
[self test4];//在对象的方法中调用对象的方法
[self test];//错误:不可以在对象的方法中调用类的方法
}
-(void)test4{
self->_Leg=10;//在对象的方法中可以访问属性(为何可以直接访问而不通过set?)
NSLog(@"您好--%d", self->_Leg);//在对象的方法中调用
}
@end
int main(){
// [Dog test];
[[Dog new] test3];
return 0;
}
继承
是什么?
当一个类(A)和另一个类(B)具有一些相同的属性和方法时,将这些相同的属性和方法抽取出来放到单独的一个类(C)中.在定义一个类(A或者B)的时候,将NSObject替换成C,则称A或B继承了类C.称A或B为C的子类,C为A或B的父类.父类所拥有的全部属性和方法,子类全部拥有.
有什么用?
1.简化代码;提高复用性.
2.子类可以直接访问父类的全部属性和方法.
怎么用?
抽取相同属性,方法,定义一个新的类.
什么时候用?
定义类的时候用:
看这个类有没有父类;
在看父类中是否有子类需要的所有方法属性,
单独定义父类没有而子类需要的方法或属性.
特点?
需要注意的问题?
1.不能定义与父类重名的属性
2.父类必须写在子类前面,因为子类要继承父类首先要有一个父类,否则需要在定义子类之前声明父类.怎么声明?
3.存在单继承,不存在多继承,可以有多层继承..也就是说一个类只能有一个父类,但一个父类可以有多个子类.父类上面还可以有父类.
4.子类可以有余父类相同的方法
//
#import <foundation/Foundation.h>
@interface Animal :NSObject{
}
-(void)run;
@end
@implementation Animal
-(void)run{
}
@end
@interface Dog :Animal{
}
-(void)run;
@end
@implementation Dog
-(void)run{
}
@end
int main(){
return 0;
}
5.抽取相同属性和方法时注意类与类之间的相关性.如,人有一个吃的方法,狗有一个吃的方法.............
重写:属性不能重写;方法可以重写.
不改变返回值,方法名;仅仅重写内部代码
组合
是什么?
一个类和另一个类相关联,然而二者又不具备种属关系,希望一个类获取另一个类的全部属性和方法时,组合就产生了.如警察有警犬;人有车子.
有什么用?
怎么用?
//组合
#import <foundation/Foundation.h>
@interface Car : NSObject{
}
-(void)trip;
@end
@implementation Car
-(void)trip{
NSLog(@"车子可以自驾游..");
}
@end
@interface Person : NSObject{
Car *_car;
}
-(Car *)abc:(Car *)car;
@end
@implementation Person
-(Car *)abc:(Car *)car{
return self->_car=car;
}
@end
int main(){
Car *c=[Car new];
[[[Person new] abc:c] trip];
/*上述一步的具体过程:
1.创建一个人的匿名对象;
2.调用对象的方法abc;
3.把Car作为参数传递进去,于是人获得了一个Car对象,可以访问其全部方法与属性
4.调用了Car对象的自驾功能
*/
return 0;
}
什么时候用?
特点? |
|