【学习笔记】【oc】类和对象及类的三大基本特征

1.类和对象

类是抽象化,对象是具体化。

(1)定义类:

分为两个步骤,类的声明:定义类的成员变量和方法;@interface 用于声明定义类的接口部分,@end表面定义结束;。

            成员变量的定义:{}用于声明该类的成员变量;语法:基本类型 成员变量名;

            方法的定义:语法:方法类型标识符(+表示类方法,-表示实例方法)(方法返回值类型)方法签名关键字:(参数类型)(参数名)

               方法签名关键字:方法名,形参标签,冒号。

               (所有方法必须用括号括起来)

         类的实现:实现类定义的方法。(在类的接口部分没有声明的方法和变量,只能在类的实现部分使用)。

       ps:方法实现跟声明中的形参名可以不同,因为形参名仅仅相当于一个占位符。

(2)对象的产生和使用

  三方面来实用类:(1)定义变量 类名* 变量名

           (2)创建对象 [[类名 alloc]init];/[类名 new];

           (3)调用类方法 [调用者 方法名:参数 形参标签:参数值...];

           如果条件允许,可直接通过对象来访问成员变量。语法格式:对象->成员变量名;

对象和指针: 类也是一种指针类型,定义一个指针变量,指向实际的类对象,类对象存放在堆内存中。

(3)self关键字

作用:让类中的一个方法可以调用类中的其他方法或其他成员变量。

      局部变量跟成员变量重名时,局部变量会隐藏成员变量,可用self强行引用成员变量。

     记得:谁调用方法或成员变量,self就表示谁。

(4)动态绑定 id类型

动态绑定:oc会自动跟踪对象所属的类,它会在运行时判断该对象所属的类,并确定需要动态调用的方法,而不是在编译的时候确定要调用的方法。

定义id类型的变量时,当其调用方法时会执行动态绑定。

ps:

id *p=[类 alloc]init]; // p.age将会提出警告。

// 指针变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行其运行时类型所具有的方法,所以在编译时不能用id类型定义的指针来直接调用成员变量。

(5)对象的初始化

自定义初始化方法:

-(id)init

{

//调用父类的init进行初始化

//将初始化的对象赋值给self,如果self不为nil说明初始化成功执行接下来的代码

if(self=[super init])

  {

  //方法块

  }

return self;

}

2.类的三大特征:封装,继承,多态

2.1:类的封装:

是什么:类要隐藏成员变量,只提供方法让外界修改。

有什么用:隐藏类的实现细节;让使用者只能使用类提供的方法来访问类的内部,可以在方法添加逻辑,从而控制对成员变量的合理访问;

     可进行数据检查,保证对象信息的完整性;便于修改,提高代码的可维护性。

怎么做:隐藏对象的成员变量和方法的实现,不允许外界的直接访问;

    把方法暴露出来,让方法来控制对这些成员变量进行完全的访问和操作。

----隐藏方式,访问控制符:

@private:只能在定义的类(当前类)中使用

@package:同个映像中使用

@private:类及其子类中使用

@public:大家都可以用

设置,修改获取对象的成员变量方法:

(1)自己定义 getter,setter方法

(2)系统自带的 合成存取方法(构造析构函数):

    使用@property定义属性;使用@synthesize修改对应的成员变量名。

    定义property时可在@property和类型中用括号添加一些额外的指示符。

    @property(...)int a;

        assign:

        atomic(nonatomic):是否线程安全

        copy:使用copy时,当使用setter方法时,会将要赋值的对象copy一个副本,再将副本传递给成员变量。

        getter,setter:为系统的getter,setter方法改名

        readonly,readwrite:

        retain:

(3)点语法:

(4)KVC方法:

2.2类的继承:(单继承:直接父类只有1个)

类通过定义子类来继承父类。

父类又叫超类,基类。

当子类可以使用父类所有的成员变量和方法。

子类可重写父类的方法,子类调用覆盖了父类的方法可以用super关键字。

2.3类的多态:

上一篇:线程--实现Runnable接口


下一篇:centos 中sshd莫名其妙不见了?