黑马程序员-----oc语言学习笔记之面向对象的三大特性

------Java培训、Android培训、iOS培训、.Net培训期待与您交流!------

一、封装
封装的好处:对类中的一些字段,方法进行保护,不被外界访问到。
oc中四种访问权限修饰符
@public、@protected、@private、@package
在开发过程当中,我们用set和get方法来改变和获取成员变量的值
1.set方法
Set方法的作用:为外界提供一个设置成员变量值的方法
命名规范:
(1)方法名必须以set开头
(2)Set后面跟上成员变量的名称,首字母大写
(3)返回值一定是void
(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
(5)形参名不能和成员变量名一样(官方推荐成员变量名前加_以示区分)
例如

#import<Foundation/foundation.h>

@interface Student:NSObject
{	//这里不用@public修饰了
	int _age;
}
//set方法声明,接受一个参数
-(void)setAge:(int)age
- (void)print;
@end
@implementation Student
- (void)setAge:(int)age
{
	_age=age;//把参数的值赋值给成员变量
}
-(void)print
{
	NSlog(@"age=%d",_age);	
}
@end
int main()
{
	Student *p=[Student new];
	
	[p setAge:10];//调用set方法 
	[p print];	//查看age的值
	return 0;
}
2.get方法
Get方法的作用:为调用者返回对象内部的成员变量
命名规范:
(1)一定有返回值,返回值的类型和成员变量的类型一致
(2)方法名和成员变量名一样
(3)不需要接收任何参数

#import<Foundation/foundation.h>

@interface Student:NSObject
{	
	int _age;
}
//set方法声明,接受一个参数
-(void)setAge:(int)age
- (int)Age;		//get 方法声明
@end
@implementation Student
- (void)setAge:(int)age
{
	_age=age;//把参数的值赋值给成员变量
}
- (int)Age
{
	return _age;	//get方法实现,返回请求的数据
}
@end
int main()
{
	Student *p=[Student new];
	
	[p setAge:10];//调用set方法 
	[p print];	//查看age的值
	return 0;
}
get和set方法注意事项

(1)在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的
数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法。
(2)成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:
  1)与get方法的方法名区分开来;2)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量

二、继承
继承的特点:
>抽取重复代码
>建立类之间的关系
>子类可以拥有父类中所有成员变量和方法
>所有的类的根类是NSObject

/声明:动物类
@interface Animal:NSobject
{
	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
{
	return _age;
}
- (void)setWeight:(double)weight
{
	_weight=weight;
}
- (double)weight
{
	return _weight;
}
@end
//声明猫类 继承自动物类
@interface Cat:Animal
@end

int main()
{
	Cat *p =[Car new];	//因为cat继承自动物,所以动物的所有成员变量和方法都可以

用
	[p setWeight:100];
	[p setAge:20];

	Nslog(@"the cat age is %d",[p age]);
	Nslog(@"the cat weight is %d",[p weight]
}

继承中需要注意的点
>父类的声明需要写在子类声明之前
>子类和父类不能拥有相同的成员变量
>子类方法可以和父类相同,调用是后就近原则
继承的使用场合
>当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
>当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类

@interface student : NSObject
{
	int _class;
	int _heiht;
}
- (void)run;

@end
@implementation student
- (void)run
{
	NSlog(@"the student is runing");
}
@end
@interface primary :student
{
	int _class   //error 不能拥有相同的成员变量
}
- (void)run;
@end
@implementation primary
- (void)run			//方法重写,就近会用自己类中的对象;
{
	NSlog(@"the primary is runing");
}
@end
------------------------------------------------------
在某些场合,虽然双方都具有继承逻辑特征,但是,并不适合:这时候需要组合
组合的例子
@interface Score : NSObject  
{  
    int  _cScore;  
    int  _ocScore;  
}  
@end  

@implementation Score  
@end  

@interface student :NSObject
{
	Score *score;	//组合 :分数可以作为学生的一部分,学生拥有成绩
	int _age;	
}
@end  
@implementation Student  
@end 
继承中的super
super的作用
>直接调用父类中的某个方法
>super处在对象方法中,那么就会调用父类的对象方法
      处在类方法中,那么就会调用父类的类方法
使用场合:
使用在子类重写父类方法时想保留父类的一些行为
interface Cat : NSObject  
- (void)run;  
- (void)test;  
+ (void)test;  
@end  
@implementation Cat
- (void)walk  
{  
    NSLog(@"Cat run");  
}  
- (void)test  
{  
    NSLog(@"Cat + test");  
}  
+ (void)test  
{  
    NSLogg(@"Cat - test");  
}  
//黑猫 
@interface blackCat : Cat
+ (void)testjump;  
@end  
@implementation blackCat
+ (void)testjump  
{  
    [super test];  
}  
- (void)run  
{  
    NSLog(@"the cat  Jump");  
    [super run];//在自己的walk中引用了父类的walk方法  
}   
int main(){  
    [blackCat testjump];  
    blackCat *p=[blackCat new];  
    [p walk];  
}  

三、多态
多态的体现
>子类对象赋值给父类指针
>父类指针访问对应的属性和方法
多态的好处
>多态的好处是简化了编程接口,允许在类和类之间重用一些习惯的命名,也可以使代码可以分散在
不同的对象,而不用试图在一个函数中考虑到所有可能的对象,使代码的扩展性和复用性更好一些。
例如
在animal父类中有eat 方法,在cat和dog中重写了父类的eat方法,这样可以用多态调用eat方法
Animal *Animal=nil;
实例化猫对象
animal = [cat new];
[animal eat];
调用的是猫的eat;
animal=[dog new];
[animal eat];
调用的是狗的eat方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值