OC语言的第四天 static、self、super、继承、NSObject类、私有属性和私有方法、多态

Static关键字:

C语言中:

1、修饰局部变量。

     将局部变量变成1个静态变量,并将这个变量存储在常量区,当函数执行完毕后,不会被回收,下次再执行的时候不会声明而是直接可以使用。

2、修饰全局变量。

     只能在当前模块中访问。

3、修饰函数。

     只能在当前模块中访问。

OC中:

static不能修饰属性,也不能修饰方法。

Static可以修饰方法中的局部变量。

       将局部变量变成1个静态变量,并将这个变量存储在常量区,当函数执行完毕后,不会被回收,下次再执行的时候不会声明而是直接可以使用。

 

Self关键字:

与JAVA、C#的this类似。
代表当前对象、当前类。

Self是1个指针:

1、在对象方法中使用时:
self指针指向当前对象。可以使用self访问当前对象的属性,可以用来调用当前对象的其他对象方法,但此时self不能用来调用类方法,类方法只能用类来调用。
2、在类方法中使用时:

self指针指向当前类 。只能调用类方法或调用当前类的其他类方法,不能使用slef访问属性和调用对象方法。因为在调用的时候对象还没有被创建、成员变量也没有产生,所以没法访问属性和对象。 

Super关键字

1、对象方法中,只能用来调用当前子类对象从父类继承过来的对象方法,此时虽然可以用self调用,但为了提高代码的阅读性,建议使用super来调用。

2、类方法中,super代表父类,用来调用父类的类方法。

3、super可只能用来调用方法,不能用来访问属性。 

继承:

       A类中定义了一些成员(属性),B类刚好拥有A类的全部成员,此时B类可以继承A类,如:

       Person类:

       属性:姓名、性别、年龄、身高、体重。

       行为:走路、吃饭、睡觉。

       Student类:想拥有Person类的全部属性及行为,就可以继承Person类。

       此时:Student是Person的子类,Person是Student的父类。

@interface Student :Person

{

       属性;

}

方法声明;

@end

 

@implementation Student

方法实现;

@end 

语法:

@interface 子类类名 :父类类名

{

       属性;

}

方法声明;

@end 

@implementation 子类类名

方法实现;

@end 

使用继承的注意事项:

1、target之间是相互独立的,不能在1个target中去访问另外1个target。

2、是类在继承,不是对象在继承。

3、当多个类具有相同的成员的时候,就可以将相同的成员定义在1个类中,用作父类。其他分别继承它。

4、继承需要满足is a的关系才能确立继承关系,不要为了继承而继承。做到物以类聚、人以群分,如对象学生就不能作为狗类的子类,电脑与车……

5、只要某个成员不是所有子类拥有的,那么这个成员就不应该定义在父类中。

6、继承特点:单根性、传递性。单根性,1个类只能有1个父类;A类继承B类,B类继承C类,那么此时A类就同时拥有B、C类中的所有成员,A只会比B、C的成员多不会少。

7、子类中不允许出现和父类同名的属性。 

NSObject类

是所有OC类的基类,为了保证我们的类拥有创建对象的能力,那么我们的类必须直接或间接的从NSOject类继承。 

访问修饰符:

特点:访问修饰符是用来修饰类的属性的

作用:用来限定对象的属性可以在什么地方可以访问。

@private: 

私有的被其修饰的属性只能在本类中的内部访问,子类可以继承父类的私有成员,但是却不能访问所继承过来的父类的私有成员。

@protected:

受保护的 被其修饰的属性,只能在本类和本类的子类中访问。

@public:

公开的 被其修饰的属性,可以在任意的地方通过对象进行访问。

@package:

包权限 被其修饰的属性,只能在当前框架中访问。 

私有属性和私有方法:

将属性真正的私有,Xcode中不提示。只能在类的内部访问,外部不提示。

在声明时,如果在大括弧中使用@private的话,虽能做到私有化,但是其他对象访问是有提示的,只是不能用而已,想要达到Xcode不提示的效果就是不写声明,只写实现,这样这个属性只能在类的内部调用。 

多态:

多种形态。方法的多种表现形式,即同一种行为,对于不同的对象具有不同的表现形式。子类对父类的方法重写,但不需重新声明。

遵从里氏替换原则,子类可以替换父类的位置,并且程序的功能不受影响。

父类的指针指向子类对象,父类的指针可以存储本类的地址,也可以存储子类的地址;

当方法的参数是1个父类类型的时候,传递实参是可以给父类对象传递也可以给子类对象传递。

唯一要注意的就是:当1个父类的指针指向1个子类的时候,只能通过这个指针访问子类对象的父类成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值