黑马程序员------OC三大特性

                                                           -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

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)eat;
{
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];
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值