Chapte10. Objective-C learning note 3. class summarize

类:

在java中,只用一个.java 文件就可以描述清楚一个类,但在objective-c 一般用2个文件来描述一个类。

1).h: 类的声明文件,用于声明成员变量,方法。类的声明使用关键字 @interface 和 @end。

attention: .h中的方法只是做一个声明,并不对方法进行实现。只是说明一下方法名,方法的返回值类型,方法接收的参数类型而已,并不会编写方法内部的代码。

2) .m: 类的实现文件,用于实现.h 中声明的方法。类的实现使用关键字 @implementation 和 @end。

方法:

1)方法的声明和实现,都必须以 + 或者 - 开头

    + 表示类方法 (静态方法)

    - 表示对象方法 (动态方法)

2)在.h 中声明的所有方法作用域都是public类型,不能更改。

成员变量:

成员变量的常用作用域有3种:

1)@public 全局都可以访问

2)@protected 只能在类内部和子类中访问

3)@private 只能在类内部访问

比java少了一种作用域:包权限作用域,原因很明显,oc没有包名的概念。


类的代码解析:

1. Student.h ——类的声明文件


1)oc 中使用关键字 @interface 来声明一个类,@interface后面紧跟类名 Student。

2)类名 Student 后面的冒号 “:”表示继承,即第二行代码意思是 Student 继承自 NSObject。

3)因为 NSObject 被声明在 Foundation.h 中,所以在第一行用 #import 包含了Foundation.h文件。

4)第三行的@end表示类的声明结束了。@interface 和 @end 是配套使用的。

2. Student.m ——类的实现文件


1)第二行,oc中使用关键字@implementation来实现一个类。@implementation后面紧跟的类名,表示要实现哪一个类。

2)因为Student这类的声明是在 Student.h 中的,所以在第1行用#import 包含了Student.h文件。

3)第三行的@end表示类的实现结束了。@implementation 和 @end 是配套使用的。


添加成员变量:

正常情况下,我们都把成员变量定义在头文件中,也就是类的声明文件 .h 中。

1. 给Student添加一个成员变量


1)定义了一个 int 类型的成员变量 age, age 的默认作用域是@protected, 即可在Student 类内部和子类中访问。

2)成员变量必须写在大括号{}里

2. 设置成员变量的作用域

给Student 增加几个不同作用域的成员变量



添加方法:

前面我们定义了一个成员变量age, 它的作用域是@protected, 外界不能直接访问它。为了保证面向对象数据的封装性,我们可以提供age的get方法和set方法,让外界间接访问age。接下来在Student中添加age 的 get 方法和 set 方法。

1. 在 Student.h 中声明方法


1)声明了age的get方法,方法名叫做age, oc建议get方法的名字跟成员变量保持一致,(java中,应该叫 getAge)

2)-表示这是一个动态方法,age前面的(int) 表示方法的返回值为int 类型,方法的返回值和参数类型都需要用小括号()包住。

3)在oc中,一个冒号:对应一个参数。age的set方法接收一个int类型的参数,参数名为newAge。

增加一个方法可以同时设置 age 和 height,可以这么写:


这个方法是动态方法,没有返回值,接收2 个参数,所以有2 个冒号;

这个方法的方法名是 setAge: andHeight:  ;

其实andHeight 可以省略,但为了增加代码可读性。


2. 在 Student.m 中实现方法

目前已经在 Student.h 中声明了3个方法,接下来实现这3个方法。



和java 进行比较:

在java中,一个 Student.java 文件就可以成员变量和方法。


创建对象:

前面定义了 Student 类,成员变量和方法,接下来用这个类创建对象。

oc程序的入口点是 main 函数,在main.m 文件中演示 Student类的使用。


1. 包含 Student.h

要用到Student这个类,需要包含它的头文件

2. 创建对象

1)在 Java中是使用关键字new 来创建对象,比如 new Student(),其实这句代码做了2件事:

      给对象分配存储空间;

      调用 Student 的构造方法进行初始化;

2)在oc中创建对象也需要按顺序做上面所述的2件事

a. 调用Student 类的静态方法 alloc 分配存储空间

     -oc方法调用是用中括号[],方法调用者写在括号左侧,方法名写在括号右侧,中间留点空格。因此上面是调用了 Student 类的静态方法alloc。

     -上面调用的alloc 方法会返回分配好内存的 Student 对象,在等号左边用了一个指向 Student 类型的指针变量 stu 来接收这个对象,注意 stu左边的

     *号。所有oc对象都是用指针变量来接收的,如果不了解指针,记住下面这点:利用类名定义一个变量时,类名后面一定要带个*号。

      -alloc 方法是这样声明的:+(id)alloc; 可以看到,它的返回值类型是id,这个id代表任何指针类型,可以理解为:id可以代表任何oc对象,类似于

      NSObject *。

b. 调用Student对象的构造方法init进行初始化

    前面调用alloc方法返回的Student对象stu是不能正常使用的,仅仅是分配了内存,并没有进行初始化,需要调用对象的init方法进行初始化。由于init是

    动态方法,所以这里使用stu 变量来调用,并不是用类名来调用。init 会返回已初始化完毕的对象,再次赋值给stu变量。这时候的Student对象stu才能

    正常使用。


访问公共成员变量和方法

前面成功创建了一个Student对象,接下来访问它的公共变量和方法。


访问 Student 对象的公共成员变量 number, 如果不是公共变量,不能这样直接访问,访问方式:对象 ->成员变量。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值