1.self的使用
/* self的使用总结 1)self用在类方法中,指代的是当期类 只能调用的时类方法 2)self用在对象方法中,指代的当前调用该方法的对象 只能调用对象方法 口诀: self指代的是方法的调用者 Caculator add 。。。。。 self --> Caculator player play self --> player p1 play self --> p1 p2 play self --> p2 */
2.继承
3、继承的好处 1)子类可以继承自父类的属性和方法(非私有) 2)子类可以使用父类的属性和方法了 4、方法的重写 前提:两个类必须有继承关系 核心思想:子类定义了和父类同名、参数一致的方法 在当前类中 子类的方法覆盖(重写)了父类的方法 方法的调用顺序: 子类的方法 ---> 父类的方法 --> NSObject--->报错
3.继承的注意事项
/* 基类: 1、继承过程中方法的访问: 父类只能访问父类的方法 子类可以访问子类的以及父类的方法 2、重写: 子类定义了一个和父类同名的方法,子类重写父类的方法 3、继承的注意事项 1)OC中的类的继承是单一继承的关系(一个类只能继承一个父类) 2)子类不能定义和父类同名的变量 子类可以定义和父类同名的方法(重写) 3) OC支持 多层 继承 */
4.代码
#import <Foundation/Foundation.h> @interface Person : NSObject { @public int _age; } -(void)show; @end @implementation Person -(void)show { NSLog(@"show"); } @end @interface Dog : Person @end @implementation Dog @end int main(int argc, const char * argv[]) { Dog *d = [[Dog alloc]init]; [d show]; d->_age = 10; NSLog(@"%d",d->_age); return 0; }
5.OC中的变量修饰符
/* 1、变量修饰符:成员变量修饰符 设定一个成员变量可以访问的范围 2、四个: @public 共有的,在任何地方都可以通过对象访问对象的成员变量 @protected 受保护,只能在当前类和子类中去使用(系统默认的就是这种类型) @private 私有的,表示只有在当前类去使用 可以被子类继承,但是不能使用 @package (主要用在框架中),表示只能在框架中使用 3、变量作用域修饰符作用的范围: 从定义的位置开始,直到遇到了其他的类型修饰符,如果没有遇到其他的类型修饰符,直到 声明成员变量的 “}” 结束 4、私有变量定义 在.m中定义的变量就是一个私有变量, 私有变量和把一个变量声明为私有的是有区别的 把一个变量声明为私有的,可以被子类继承,但是不能使用 私有变量,根本不会被子类继承。 */
6.OC中的私有方法
//私有方法 //1)协议的时候,可以定义私有方法 //2) 在.m中定义的方法,而没有在.h中声明,这个方法就是一个私有方法 //3) 对本类的对象是隐藏的 // 私有方法只能在当前类的文件中使用,在子类中不能使用
7.多态
(1)没有继承就没有多态 (2)代码的体现:父类类型的指针指向子类对象 (3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。 (4)局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
8.类的本质
/* 类的本质:也是一个类 Person *p =[Person new]; p是对象,是Person 类型 p ----> Person Person 是一个类对象,Class类型 SEL是方法的选择器 SEL 是一种类型,选择器类型 //表示 把eat方法封装成 SEL类型得 //SEL 类型就有 eat方法的地址 SEL s1 = @select(eat); */