黑马程序员------OC三大特性
2015-05-20 18:45
225 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
1. 封装
Set方法
1作用.提供一个方法给外界设置成员变量
Set后面跟上成员变量的名称,成员变量的首字母大写
返回值一定是void
一定要接收一个参数,而且参数类型跟成员变量类型一致
形参的名称不能跟成员变量一样
当A类包含了B类的成员变量或者类方法时,我们可以让A类继承B类,A类为B类的子类,B类为A类的父类,而NSObject是所有类的父类。继承可以有效减少代码冗余,更好地建立类与类之间的关系,子类拥有父类所有的成员变量和方法。当然这样也容易因为耦合性太高,牵一发而动全身
方法名必须以set开头
Get方法
1返回对象内部成员变量
肯定有返回值,返回值类型肯定与成员变量一致
方法名与成员变量一样
不需要接收任何参数
调用eat方法时,使用的是Dog类的eat方法,而不是Animal的eat方法。需要注意,没有继承关系,不能使用多态,同时,子类的指针不能指向父类的对象。
多态的好处是可以更好地调用函数,无需多次定义类似的函数与相应的类进行匹配。但是父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法。
需要注意的是,类的成员变量不能轻易被外界调用修改,通常使用setter方法与getter方法赋值和获取,但是成员变量要与getter和setter方法参数区分,所以成员变量以_下划线开头。另外,OC是弱语法,在只写实现不写声明的情况下,方法依然可以运行,但并不推荐。
封装
成员变量的命名一定要以下划线开头
作用:让成员变量和get方法的名称区分开
可以跟局部变量分开,下划线开头的变量一般都是成员变量
弱语法、
一旦运行过程中出错就会闪退
Oc是在运行过程中才会检测到对象有没有事项相对应的方法
类方法
类方法都是以加号开头,只能由类名来调用
类方法中不能访问成员变量
类方法使用场合和好处
不依赖于对象,执行效率高
能用类方法尽量用类方法
当方法内部不需要使用到成员变量时就可以改为类方法
可以允许类方法和对象方法同名
继承的基本使用
当A类包含了B类的成员变量或者类方法时,我们可以让A类继承B类,A类为B类的子类,B类为A类的父类,而NSObject是所有类的父类。继承可以有效减少代码冗余,更好地建立类与类之间的关系,子类拥有父类所有的成员变量和方法。当然这样也容易因为耦合性太高,牵一发而动全身
抽取重复代码
建立了类之间的关系
子类可以拥有父类中的所有成员变量和方法
多态
没有继承就没有多态
代码的体现:父类类型的指针指向子类对象
好处:如果函数方法参数中使用的是父类类型,可以传入父类子类对象
局限性:父类类型的变量不能直接调用子类特有的方法
1. 封装
Set方法
1作用.提供一个方法给外界设置成员变量
Set后面跟上成员变量的名称,成员变量的首字母大写
返回值一定是void
一定要接收一个参数,而且参数类型跟成员变量类型一致
形参的名称不能跟成员变量一样
当A类包含了B类的成员变量或者类方法时,我们可以让A类继承B类,A类为B类的子类,B类为A类的父类,而NSObject是所有类的父类。继承可以有效减少代码冗余,更好地建立类与类之间的关系,子类拥有父类所有的成员变量和方法。当然这样也容易因为耦合性太高,牵一发而动全身
方法名必须以set开头
#import <Foundation/ Foundation .h> @interface Student : NSObject { @public int age; int no; }
- (void)setAge:(int)newAge; - (void)study; @end @implementation Student - (void)setAge:(int)newAge; - { if (newAge <= 0) { newAge = 1; } Age = newAge; }
Get方法
1返回对象内部成员变量
肯定有返回值,返回值类型肯定与成员变量一致
方法名与成员变量一样
不需要接收任何参数
调用eat方法时,使用的是Dog类的eat方法,而不是Animal的eat方法。需要注意,没有继承关系,不能使用多态,同时,子类的指针不能指向父类的对象。
多态的好处是可以更好地调用函数,无需多次定义类似的函数与相应的类进行匹配。但是父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法。
-(int)age { Return age; } - (void)study { NSLog(@”%d个学生在学习”,age); } @end Int main( ) { Student *stu = [Student new]; [stu setAge:10]; NSLog(@”学生的年龄是@d岁”,[stu age]); Return 0; }
需要注意的是,类的成员变量不能轻易被外界调用修改,通常使用setter方法与getter方法赋值和获取,但是成员变量要与getter和setter方法参数区分,所以成员变量以_下划线开头。另外,OC是弱语法,在只写实现不写声明的情况下,方法依然可以运行,但并不推荐。
封装
成员变量的命名一定要以下划线开头
作用:让成员变量和get方法的名称区分开
可以跟局部变量分开,下划线开头的变量一般都是成员变量
#import <Foundation/ Foundation .h> typedef enum{ SexMan, SexWoman }Sex;
@interface Student : NSObject { Int no; Sex sex; } Sex的set和get方法 - (void)setSex:(Sex)Sex; - (Sex)sex; No的set和get方法 - (void)setNo(int)no; { _no = no; } - (int)no; { return _no; } @end int main( ) { Student *stu = [Student new]; [stu setSex:SexMan]; [stu setNo:10]; [stu sex]; [stu no]; return 0; } @implementation Student - (void)setSex:(Sex)newSex; { _Sex = newSex; } -(Sex)sex { Return _sex; } @end
弱语法、
一旦运行过程中出错就会闪退
Oc是在运行过程中才会检测到对象有没有事项相对应的方法
#import <Foundation/ Foundation .h> @interface Student : NSObject - (void)test; @end @implementation person @ent
Int main() { Person *p = [person new]; [p test]; return 0; }
类方法
类方法都是以加号开头,只能由类名来调用
类方法中不能访问成员变量
类方法使用场合和好处
不依赖于对象,执行效率高
能用类方法尽量用类方法
当方法内部不需要使用到成员变量时就可以改为类方法
可以允许类方法和对象方法同名
#import <Foundation/ Foundation .h> @interface person : NSObject { int age; } + (void)printClassName; - (void)test; +(void)test; @end @implementation person + (void)printClassName; { NSLog(@”这个叫person-%d”,age); } -(void)test { NSLog(@”111-%d,age”); [person test] } + (void)test; { NSLog(@”222”) } @end int main() { //[person printClassName]; Person *p = [person new]; [p printClassName]; [p test]; Return 0; }
继承的基本使用
当A类包含了B类的成员变量或者类方法时,我们可以让A类继承B类,A类为B类的子类,B类为A类的父类,而NSObject是所有类的父类。继承可以有效减少代码冗余,更好地建立类与类之间的关系,子类拥有父类所有的成员变量和方法。当然这样也容易因为耦合性太高,牵一发而动全身
抽取重复代码
建立了类之间的关系
子类可以拥有父类中的所有成员变量和方法
#import <Foundation/ Foundation .h> @interface Dog : NSLobject { int _age; double _weight; } - (void)setAge:(int)age; - (int)age; - (void)setWeight:(double)weight; - (double)weight; @end @implementation Animal - (void)setAge:(int)age { _age = age; } - (int)age { retirn _age; } - (void)setWeight(double)weight { _weight = weight; } - (double)weight { Return _weight; } @end @intplface Dog : Animal @end @implementation Dog @end @interface Cat : Animal @end @implementation Cat @end Int main() { Dog *d = [Dog new]; [d setAge:10]; NSLog(@”age=%d”,[d age]); Return 0; }
多态
没有继承就没有多态
代码的体现:父类类型的指针指向子类对象
好处:如果函数方法参数中使用的是父类类型,可以传入父类子类对象
局限性:父类类型的变量不能直接调用子类特有的方法
#import <Foundation/ Foundation .h> @interface Animal : NSLobject - (void)eat; @end @implementation Animal - (void)eat { NSLog(@”Animal-吃”); } @end @interface Dog : Animal -(void)run; @end @implementation Dog -(void)run; { NSLog(@”Dog-跑”); } -(void)ea 9f0b t; { NSLog(@”Dog-吃”); } @end @interface Cat : Animal @ent @implementation Cat -(void)eat; { NSLog(@”Cat-吃”); } @end Void feed(Animal *a) { [a eat]; } int main() { Dog*d = [Cat new]; [d eat]; }
相关文章推荐
- 黑马程序员-OC里的三大特性
- 黑马程序员---OC三大特性
- 黑马程序员————IOS学习笔记 第4篇 OC面向对象三大特性(2)
- 黑马程序员—OC语言面向对象三大特性
- 黑马程序员——OC三大特性-7:多态
- 黑马程序员:OC学习日记之三大特性
- 黑马程序员_OC面向对象的三大特性之封装及OC中类方法和self的使用
- 黑马程序员-OC之面向对象的三大特性:封装、继承和多态
- 黑马程序员-OC语言之三大特性
- 黑马程序员——OC语言基础——面向对象三大特性之多态
- 黑马程序员---OC面向对象三大特性(封装、继承、多态)
- 黑马程序员--ios基础--oc--三大特性
- 黑马程序员——OC基础——面向对象的三大特性(三)
- 黑马程序员——OC的三大特性:封装,继承,多态
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- 黑马程序员——【OC】面向对象的三大特性
- 黑马程序员——OC三大特性之封装
- 黑马程序员——OC语言学习——OC面向对象的三大特性:封装、继承、多态,OC字符串——NSString
- 黑马程序员-09.OC面向对象的三大特性和开发技巧