类和对象, 实例变量可见度, 自定义初始化

来源:互联网 发布:阿里云网络电视说明书 编辑:程序博客网 时间:2024/05/21 09:22

/* 1.类和对象 */


/******定义类*******/ 

        

 1.新建文件,自动生成.h .m两个文件

 2. .h接口部分

 3. .m实现部分

    

创建一个Person类

Person.h

/*********声明特征( 实例变量 )***********/{        @public    //姓名  字符串    /* 1. NSString 表示字符串, C语言中 char str[10]       2. 实例变量前面必须加下划线 _        3. NSInteger 表示整形    */    NSString *_name;       //性别        NSString *_sex;     //年龄        NSInteger _age;}/*********声明行为( 方法 )***********//* 1. - 横线开头 加空格   2. 以 ; 分号 结尾*/- (void)sayHello;- (void)info;

Person.m

/*  实现方法  *//* 1. 方法后面没有分号 ;   2. NSLog    3. @ OC 对 C语言的扩展*/- (void)sayHello{    NSLog(@"Hello");}- (void)info{    NSLog(@"姓名:%@, 性别:%@, 年龄:%ld", _name, _sex, _age);}


main.m


/********创建对象**********/

 1. 导入.h文件

 2. 分配内存

 3. 初始化


/* 1. alloc 系统提供的方法作用:分配内存

2. 指针表示对象的首地址, OC用指针代指对象

3. init 系统提供的方法作用初始化

4. 分配内存和初始化连写

*/


        Person *person1 = [Person alloc];                person1 = [person1 init];                //连写        Person *person2 = [[Person alloc] init];

/*********** 使用对象 ***********/

        [person1 sayHello];                [person1 info];



/**********实例变量操作**********/

        

/***实例变量的赋值***/

        /* @public 成员变量用-> 进行赋值 */

        person1 -> _name = @"Tom";        person1 -> _age = 20;        person1 -> _sex = @"男";             


/***实例变量的取值****/        

        NSLog(@"姓名:%@", person1 -> _name);

       

总结:


1. 对象: 一个类的指针变量(指针类的实例变量)


2. 实例变量 : 已经初始化过后的变量


3. 成员变量 : { } 里面写的


4. id : 任意类型的指针变量


5. instancetype : 实例变量类型


6. .h 里写@class 来声明  , 可以是不存在的类,  

    .m 里写 #import  是拷贝代码, 真实存在的 (重复的不引用)


7. 方法 三要素 : 返回值类型, 方法名, 形参

    形参 : 公共的可变(内容是可变的)的变量


8.  - : 实例化方法(对象方法) 

     +: 类方法


9. 类方法什么时候调用 :  

    (1) 当前方法中没有用到当前类的所有内容(成员变量, 属性)      

    (2) 简化代码 (可以把成员变量和属性 变成形参传进来)


10. 调用方法步骤:  

     (1) 先看这个方法属于哪个类的   

     (2) 看方法是什么类型的(实例化方法, 类方法)

     (3) 看返回值类型


11. 封装需要考虑的问题 : 最开始的时候是否忘记赋值 ; 使用时能否进行二次修改

      (1)必须给定的变量 (调用初始化方法)    

      (2)给使用者安全 (提供尽量少的接口 : 属性, 方法)     

      (3)简化代码 (重复性强)


/* 2. 实例变量可见度 */

成员变量可见度有3:


1.@public类的外部和内部都可以访问的

2.@protected受保护的,外部不能访问, 内部可以访问

3.@private私有的,外部不能访问, 内部可以访问, 但是子类不能访问

默认是@protected 受保护的


/*对于@protected修饰实例变量,外部不能直接访问,提供两个方法,赋值方法,取值方法 */



创建一个Student类

Student.h

{    @protected    NSString *_hobby;    NSInteger _age;}/* 赋值方法 *//* 1. set 开头   2. 无返回值*/- (void)setHobby:(NSString *)hobby;- (void)setAge:(NSInteger)age;/** 多个参数赋值方法 **/// 参数形容词 age// 参数类型// 参数名- (void)setAge:(NSInteger)age hobby:(NSString *)hobby;/* 取值方法 *//* 1. 带有一个返回值的无参数的方法   2. OC中 只能带一个返回值*/// 返回值类型//参数- (NSString *)hobby;- (NSInteger)age;

Student.m


- (void)setHobby:(NSString *)hobby{    _hobby = hobby;    }- (void)setAge:(NSInteger)age{    _age = age;}- (NSString *)hobby{    return _hobby;}- (NSInteger)age{    return  _age;}


main.m


        Student *stu = [[Student alloc]init];               // 赋值方法        [stu setHobby:@"游泳"];               // 取值方法        [stu hobby];        NSLog(@"爱好: %@", [p1 hobby]);                // 赋值        [stu setAge:20];        //取值方法        NSLog(@"年龄: %lu", [p1 age]);


/* 3.自定义初始化 */

Student.h


- (id)initWithHobby:(NSString *)hobby                age:(NSInteger)age;


Student.m

- (id)initWithHobby:(NSString *)hobby                age:(NSInteger)age            {    _hobby = hobby;    _age = age;        return self;}

main.m


        Student *stu1 = [[Student alloc]initWithHobby:@"Running" age:18];


0 0
原创粉丝点击