OC继承、多态
OC没有方法的重载!
因为即使参数个数一样多,方法名也都是不一样的!方法参数的个数不一样名字肯定也不一样!
有 “+”“-”方法的区别,“:”也是方法名的一部分。
以下方法方法名都是不一样的:
1 -(void)test:(int) num; 2 +(void)test:(int) num; 3 -(void)test:(float) num1; 4 -(void)test:(float) num1 and(float) num2;
OC类的本质:
类的本质其实也是一个对象(类对象)
类对象:
1)类对象在程序中一直存在。
2)类对象是一种数据结构,存储类的基本信息。
3)类所保留的信息在程序编译时确定,在第一次使用该类的时候被加载到内存中。
4)类对象代表类,class代表类对象,类方法属于类对象
5)如果消息的接收者是类名,则雷鸣代表类对象。
6)从类对象里可以知道父类的信息、可以响应的方法等。
7)类对象只能使用类方法,不能使用对象方法。
1 Person *p = [Person new]; 2 3 p 实例对象 4 5 Person也是一个对象(类对象),是class类型
类对象获取:
1)通过实例对象获取
1 Dog *dog = [Dog new]; 2 Dog *d2= [Dog new]; 3 4 //获取 5 Class c = [dog class]; 6 Class c2 = [dog class];
2)通过类名来获取类对象:
Class c3 = [Dog class];
OC类的继承:
0)所有类的基类都是NSObject
1)子类不鞥定义和父类同名的变量,但是可以继承父类的变量
2)OC类支持单一继承,不支持多继承(java支持多继承)
继承体系中方法调用的顺序:
1)在自己类中找
2)如果没有去父类中找
3)重复2)一直找到NSObject都没有就报错了
@public、@pricvate、@protected权限:
1 #import<Foundation/Foundation.h> 2 @interface Person : NSObject{ 3 //公开的,在任何地方都能通过实例变量访问 4 @public 5 int _age; 6 //私有的,表示只能在当前类中使用 7 @privaet 8 NSString *_name; 9 //受保护的,表示只能在当前类和子类中访问 10 @protected 11 float _weight; 12 }
多态概念和条件:
程序中的多态:不同的对象以自己的方式响应相同名称方法的能力成为多态。
多态的条件:
有继承关系、有方法重写、父类的声明纸箱子类的对象
多态的优点:
多态的主要好处就是简化了编程接口。他容许在类和类之间重用一些习惯的命名,
儿不用为每一个新增加的函数起一个新的名字。
多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有的情况。
这样使得代码扩展性和复用性好很多。
使用多态:
1 Animal *a2 = [Dog new]; 2 [a2 run]; 3 //父类声明指向子类对象 4 Animal *a3 = [Cat new]; 5 [a3 run];