三大特性
-----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------
一、封装
1.由于@public的成员可以被随意赋值,所以很多时候被赋予的值是无效的,于是我们使用set方法和get方法来管理成员的访问。
2.set
作用:用来设置成员变量,可以在方法过滤掉一些不合理的值
命名规范:方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
形参名称不要跟成员变量同名
形参名称不要跟成员变量同名
一定会接收一个参数,而且参数类型和成员变量类型一致
返回值 一定是void
3、get
作用:返回对象内部的成员变量
命名规范: get方法的名称一般就跟成员变量同名
命名规范: get方法的名称一般就跟成员变量同名
肯定返回值,返回值类型和成员变量类型一致
不需要接收任何参数
4、实例:
@interface Student : NSObject
{
int _age ;
int _cgrade;
}
- (void)setCgrade :(int)newCgrade;//接收
-(int)cgrade;//输出
@end
@implementation Student
- (void)setCgrade :(int)newCgrade{
_cgrade = newCgrade; //将给的值赋值给对象;
}
-(int)cgrade{
return _cgrade; //执行cgrade命令输出对象的值;
}
@end
int main ()
{
Student *st = [Student new];
[st setCgrade :98]; //执行输入语句;
NSLog(@"%d",[st cgrade];//执行输出语句;
return 0;
}
5.封装的好处
1)过滤不合理的值
2)屏蔽内部的赋值过程
3)让外界不必关注内部的细节
2)屏蔽内部的赋值过程
3)让外界不必关注内部的细节
二、类方法
1.对象方法类方法比较
对象方法:
1)以减号-开头
2)只能让对象调用,没有对象,这个方法根本不可能被执行
3)对象方法能访问实例变量
类方法
1)以加号+开头
2)只能用类名调用,对象不能调用
3)类方法中不能访问实例变量
2)只能让对象调用,没有对象,这个方法根本不可能被执行
3)对象方法能访问实例变量
类方法
1)以加号+开头
2)只能用类名调用,对象不能调用
3)类方法中不能访问实例变量
使用场合:当不需要访问成员变量的时候,尽量用类方法
类方法和对象方法可以同名
类方法和对象方法可以同名
三、self关键字
问题:
当成员变量和局部变量同名时,采取就近原则,访问的是局部变量
如; 我成员变量的值为20;
- (void)test{
int _age = 10;
NSLog(@"%d",_age);
}
这时成员变量的值为10;所以我们要用self来解决问题;
self访问成员变量,区分同名的局部变量
谁调用了这个方法,那么self就指向谁
于是改成:
- (void)test{
int _age = 10;
NSLog(@"%d",self_age);
}
此时输出为:20;
注意:出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数里
使用 "self->成员变量名" 访问当前方法调用的成员变量
使用 "[self 方法名];" 来调用方法(对象方法\类方法)
使用 "[self 方法名];" 来调用方法(对象方法\类方法)
错误: 低级错误:用self去调用函数
类方法中用self调用类方法,对象方法中用self调用对象方法
self死循环
self死循环
四、继承性
1.定义
cat类:
@interface Cat :NSObject
{
int _weigt;
}
-(void)setWeight:(int)newWeight;
-(int)weight;
@end
@implementation Cat
-(void)setWeight:(int)newWeight{
_weight = newWeight;
}
-(int)weight{
return _weight;
}
@end
Dog类:
@interface Dog :NSObject
{
int _weigt;
}
-(void)setWeight:(int)newWeight;
-(int)weight;
@end
@implementation Dog
-(void)setWeight:(int)newWeight{
_weight = newWeight;
}
-(int)weight{
return _weight;
}
@end
Cat和Dog拥有相同属性和行为所以我们可以抽取出来;
Animal类:
@interface Animal :NSObject
{
int _weigt;
}
-(void)setWeight:(int)newWeight;
-(int)weight;
@end
@implementationAnimal
-(void)setWeight:(int)newWeight{
_weight = newWeight;
}
-(int)weight{
return _weight;
}
@end
再重新定义Cat和Dog
@interface Cat : Animal
@end
@implementation Cat
@end
@interface Dog : Animal
@end
@implementationDog
@end
2、使用方法
类B :类A
我们就讲A是B的父类,B是A的子类
子类方法和属性的访问过程:如果子类没有,就去访问父类的
子类和父类不能有相同的成员变量
3、专业术语
超类(superclass)是你所继承的类
父类(parentclass)是超类的另一种表达方式
子类(subclass)是实施继承的类
孩子类(childclass)是子类的另一种表达方式
4、继承的好处
父类(parentclass)是超类的另一种表达方式
子类(subclass)是实施继承的类
孩子类(childclass)是子类的另一种表达方式
4、继承的好处
消除重复内容,提高效率
建立了类与类之间的联系
五、多态性1、多态的基本概念
某一类事物的多种形态
OC对象具有多态性
2、多态的体现
Person *p = [Student new];
p->age = 100;
[p walk];
子类对象赋值给父类指针
父类指针访问对应的属性和方法
3、多态的好处
用父类接收参数,节省代码
4,多态的局限性
不能访问子类的其他属性
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------