一,类和对象
面向对象的核心就是类和对象。
类是具有相同特征和行为的事物的抽象。例如:老师类的相同特征是同属于人类,有学生;相同的行为是要备课,要讲课,要布置作业,要批改作业。
而在OC语言中的类的定义分两部分:第一部分,接口部分是指对外声明类的特征和行为。第二部分,实现部分是指对内实现类的行为。
类是模板,对象是具体表现。
创建对象分两步:分配内存空间和初始化。分配内存空间:根据类中的声明的实例变量为对象分配内存,将多余实例变量设置为默认值0,并返回首地址。初始化:为对象的实例变量设置初值。
创建对象的定义:
+(id)alloc;‘ + ‘表示这个方法属于类,只能有类执行,表明其他代码可以直接调用类方法,不需要创建类的实例变量。id是返回值类型,表示任意类型的对象,即创建好的对象;
-(id)init;’ - ‘表示这个方法属于对象,只能对象执行,id返回值类型,表示初始化完成的对象。
Teacher *tea1 = [Teacher alloc]//alloc分配内存空间;
tea1 = [tea init];//init给成员变量赋值;
二、接口部分
接口部分写在.h文件里,它是负责对外声明类的特征和行为。类的接口语法格式是:
@interface 类名:父类名{
变量定义;
}
方法定义;
@end//结束标志,不能在@end后写代码。
接口部分的目的是声明类的实例变量和方法,即类的特征和行为;
实例变量的可见度即添加在实例变量之前的关键字,例如@public 公有的 指实例变量可以在类的内部和外部操作。@protected 受保护的 指实例变量只能在该类和其子类内操作。@private 私有的 是指实例变量只能在该类内访问。注意:如果不添加实例变量的可见度的话,类的实例变量默认是受保护的即@protected。
不使用@public 的原因
1、使用@public 关键字,暴漏了类内部的细节
2、不符合面向对象语言的三大特性之一--封装
例如:
iinterface Teacher : NSObject //开始
{
@public//实例变量的可见度,公开的
NSString *_name;
NSString *_sex;
int _age;
}
//类的行为(方法)
- (void)lecture;
- (void)prepares;
- (void)course;
@end
三、实现部分
实现部分写在.m头文件里,它是负责对内实现类的行为。
实现部分的语法格式:
@implementation 类名
//方法的实现
@end
例如:
@implementation Teacher
-(id)init{ //初始化方法是指在初始化过程中给这些类的特征即类的实例变量赋值。
_name = @"张三";
_sex = @"男";
_age = 20;
return self; //self指的是当前类,该句指的是返回自身。
}
//方法实现部分
//实现部分,实现类的方法(行为)里的操作
- (void)lecture{
NSLog(@"%@ , %@ , %d ",_name,_sex,_age);
NSLog(@"上课中,请勿打扰"); //NSLog是OC的输出函数;
}
- (void)prepares{
//NSLog(@"%@ , %@ , %d ",_name,_sex,_age);
NSLog(@"备课中,请勿打扰");
}
- (void)course{
NSLog(@"一对一辅导更进步");
}
@end
四、调用方法
调用类的方法需要在main函数中先引入头文件即
再在main函数中写调用方法的代码。
创建好了一个类,并写好了所有在.m和.h文件中的代码,但要实现它我们必须要调用它。
如何调用类的方法,例如:
创建一个类的对象并初始化
Teacher *tea2 = [Teacher alloc]init];
[tea2 lecture]; //对象tea2调用lecture方法。
后台调用结果如图
在C语言中我们都把[tea2 lecture];叫做调用方法,但其实在OC语言中,并没有这种说法 ,正确地说法是给这个类或实例对象发送消息(message)。类或实例对象称为“接收方”,所有调用方法的格式也可理解为 [接收方 消息];
OC语言中允许一个方法调用中嵌套另一个方法调用,如Teacher *tea2 = [Teacher alloc]init];它是初始化方法中嵌套一个分配内存的方法。