A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yufang1993 中级黑马   /  2015-11-18 00:08  /  565 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
}
什么时候用?
特点?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马