黑马程序员技术交流社区
标题:
学习笔记19:OC基础(6)
[打印本页]
作者:
新生heima
时间:
2015-8-18 23:39
标题:
学习笔记19:OC基础(6)
self 和super关键字:
用于在方法中引入该方法的对象
oc语言中的self相当于C++和java中的this指针
设置器(setter)和访问器(getter)提供外界操作内部类属性的一个通道
self的应用场景:
1)用在类方法中
self在类方法中使用,指代的是当前类
【对象名 class】返回的是当前类(地址)
NSLog(@“Person =%p”,[p class]);
2)用在对象方法中
指代的是调用当前方法的对象
就是说当一个对象调用对象方法的时候,在被调用 的对象方法内,用self指代自己,可以再次调用其他对象方法(能够达到着这种效果的方法,还有一种,那就是将本对象作为参数传递到自己调用的方法中)
self存储的是堆区对象的首地址,和对象名存储的地址一样(self可能存放在内存堆区)
3)修饰成员变量
在成员变量和形参重名的情况下(一般形参是去掉下划线的成员变量不会重名),当对象调用这样的对象方法时,同名的形参会屏蔽掉成员变量(同名情况下,局部变量会屏蔽全局变量),造成在对象中无法使用成员变量,这时需要通过self修饰
(self->age)才能正确方位成员变量
4)self在oc 的内存管理特殊使用
类的继承和派生
如何继承?
1)导入要继承的那个类的头文件。
2)@interface 子类名:父类名
派生类的方法和属性=基类的方法和属性 +派生类新增的方法和属性
注意:
1)基类的私有属性能被继承,不能被使用
2)OC中的继承是单继承的,只能有一个父类
3)继承要具有合理型
方法的重写!!!
声明不用管他,把父类的方法放在子类实现文件中,重新实现,就是重写
重写方法的执行顺序,当子类对象调用重写方法时,如果子类中有重写就调用子类的,如果没有就去父类找,父类如果没有就去更高一级的父类调用。
实例变量的修饰符
1)@public( 任意程序集)
2)@pr otect ed(同一个类或派生类)默认类型
3)@private(同一个类)
面试题:
1)@private变量能否被子类继承?
子类可以继承父类的所有实例和方法
、
2)@private变量能否被子类访问
不能访问,(测试方法:在子类中使用@private 的变量,会有提示(表示已经继承),但是提示有删除线(表示不能访问))
OC中的私有变量:
在实现文件中定义的变量是纯私有的变量,是子类也无法继承的,因为子类在继承的时候只是包好了声明文件,纯私有变量在实现文件中,因此没有被继承,也不能被继承。
OC中的私有方法:
在.h文件中没有被声明,但是在,m文件中实现的对象方法称为私有方法,不能被继承和访问
那怎么访问私有方法呢?在实现文件中可以通过self可以在其他方法中访问【self 私有方法】(经过测试,其实在实现文件中的其他方法中通过初始化对象也是可以访问私有方法的,但是尽量不要这样写)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2