黑马程序员---第五篇 OC三大特性
来源:互联网 发布:学霸专用解锁软件 编辑:程序博客网 时间:2024/05/02 02:41
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、封装(即成员变量的封装)
1、好处: 过滤不合理的值;屏蔽内部的赋值过程;让外界不必关注内部的细节。
2、使用set方法:
(1)作用:提供一个方法给外界设置成员变量值
(2)命名规范:
1)方法名必须以set开头。
2)方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写。
3)返回值一定是void。
4)形参名称不要跟成员变量同名。
5)一定接收一个参数,而且跟成员变量类型一致。
3、用set进行封装的实例:
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int age;
}
- (void) setAge:(int) newAge;//注意:的使用
- (void) Study;//声明
@end
@implementation Student
//set方法的实现
- (void) setAge:(int) newAge
{
//对传进来的参数进行过滤
if(newAge<=0)
{
newAge=1;
}
age=newAge;
}
- (void) Study //方法
{
NSLog(@"%d岁的学生在学习",age);
}
@end
int main(int argc, const char * argv[])
{
Student *stu=[Student new];//oc中的变量都是用指针指向的,不要忘记*
//去掉public时这样调用函数
[stu setAge:-10];//输出结果:1岁的学生在学习
[stu Study];
//当输入“-10”是会输出结果:-10岁的学生在学习.不符合逻辑规则,所以引出了封装的概念
return 0;
}
4、get方法进行封装
(1)作用:返回对象内部的成员变量。
(2)命名规范:
1)有返回值,与成员变量类型一致。
2)方法名跟成员变量名一样。
3)不需要接收任何参数。
(3)实例:(在set方法进行封装的基础上改写)
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int age;
}
- (void) setAge:(int) newAge;//注意:的使用
- (void) Study;//声明
@end
@implementation Student
//set方法的实现
- (void) setAge:(int) newAge
{ //对传进来的参数进行过滤
if(newAge<=0)
{
newAge=1;
}
age=newAge;
}
//get方法进行封装
-(int) age;
{
return age;
}
- (void) Study //方法
{
NSLog(@"%d岁的学生在学习",age);
}
@end
int main(int argc, const char * argv[])
{
Student *stu=[Student new];//oc中的变量都是用指针指向的,不要忘记*
[stu setAge:0];
NSLog(@"学生的年龄是%d岁",[stu age]);//输出结果:学生的年龄是1岁
return 0;
}
二、继承(最重要的特性)
1、好处:
1>不改变原来模型的基础上,拓充方法。
2> 建立了类与类之间的联系。
3> 抽取了公共代码。
4> 坏处:耦合性强。
2、使用场合
1> 它的所有属性都是你想要的,一般就继承。
2>它的部分属性是你想要的,可以抽取出另一个父类。
实例:从Dog与Cat中抽象出Animal类
#import <Foundation/Foundation.h>
//Dog与Cat继承Animal
/**********Animal************/
@interface Animal : NSObject
{
int _age; //Animal 的年龄
double _weight; //Animal的体重
}
-(void) setAge:(int) age;
-(int) age;
-(void) setWeight:(double) weight;
-(double) weight;
@end
@implementation Animal
-(void) setAge:(int) age;
{
_age=age;
}
-(int) age;
{
return _age;
}
-(void) setWeight:(double) weight;
{
_weight=weight;
}
-(double) weight;
{
return _weight;
}
@end
/********Dog*******/
//Animal是Dge与Cat的父类
@interface Dog:Animal //继承Animal,即拥有Animal所有的成员变量和方法
@end
@implementation Dog
@end
/**********Cat**********/
@interface Cat : Animal //继承Animal,即拥有Animal所有的成员变量和方法
@end
@implementation Cat
@end
int main(int argc,const char * argv[])
{
Dog *d=[Dognew];
[d setAge:10];
NSLog(@"age=%d",[dage]);//输出结果:age=10
return 0;
}
三、多态
1、基本概念:
OC的多态性指的是对象的多种形态。
2、多态的体现
Person*p = [Student new];
p->age= 100;
[pwalk];
子类对象赋值给父类指针。
父类指针访问对应的属性和方法。
3、多态的好处:
用父类接收参数,节省代码。
4、多态的局限性
不能访问子类的属性(但是可以考虑强制转换)。
5、多态的细节
动态绑定:在运行时根据对象的类型确定动态调用的方法。
6、实例:
#import <Foundation/Foundation.h>
//多态(对象的多态性)
@interface Animal : NSObject
-(void) eat;
@end
@implementation Animal
-(void)eat
{
NSLog(@"Animal:吃点东西!");
}
@end
@interface Dog : Animal
@end
@implementation Dog
-(void)eat
{
NSLog(@"Dog在吃东西!");
}
@end
int main(int argc,const char * argv[])
{
//多种形态
//Dog *d=[Dog new];//Dog类型
//多态:父类指针指向子类对象
Animal *a=[Dognew];
//注意:Dog *a=[Animal new];(是不合适的,虽然不会报错,但是会出现警告,同时也不符合逻辑)
//调用方法时会检测对象的真实类型
[a eat]; //输出结果:Dog在吃东西!
return 0;
}
- 黑马程序员---第五篇 OC三大特性
- 黑马程序员:OC三大特性
- 黑马程序员 5 oc三大特性
- 黑马程序员-OC-三大特性
- 黑马程序员------OC三大特性
- 黑马程序员(OC的三大特性)
- 黑马程序员-OC对象的三大特性
- 黑马程序员—OC—三大特性
- 黑马程序员——OC三大特性之封装
- 黑马程序员:OC学习日记之三大特性
- 黑马程序员——OC基础三大特性
- 黑马程序员——OC语言三大特性
- 黑马程序员-OC里的三大特性
- 黑马程序员- IOS学习笔记-OC三大特性
- 黑马程序员--07 OC 三大特性
- 黑马程序员——02OC三大特性
- 黑马程序员---OC--面向对象三大特性
- 黑马程序员————oc三大特性
- java基础知识回顾
- C2-分支结构
- opencv Mat 使用时的注意事项
- HTTP METHOD
- KM最小
- 黑马程序员---第五篇 OC三大特性
- C3-循环
- Redis学习
- java File类
- MarkDown编辑器
- 关于struts.xml
- HDU 1134 Game of Connections
- 批处理中的符号用途说明
- 水煮互联网创业,互联网创业的盲区