黑马程序员--OC面向对象的三大特征——封装、继承、多态

----------------------ASP.Net+Unity开发.Net培训期待与您交流! ----------------------



一、封装

1、封装是对象和类概念的主要特性。它是隐藏内部实现,稳定外部接口,可以看作是“包装”。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

 

2、set方法

(1)  作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

(2)  命名规范:

 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写

 形参名称不要跟成员变量同名

3、get方法

1)  作用:返回对象内部的成员变量

2)  命名规范:get方法的名称一般就跟成员变量同名

4、代码示例

#import<Foundation/Foundation.h>

// 声明

@interface Car : NSObject

{

int_wheels; // 轮子个数

}

/*set方法*/

- (void) setWheels:(int)wheels;

/*get方法*/

- (int) wheels;

@end

 

@implementation Car

// set方法的实现

- (void) setWheels:(int)wheels

{

// 对外面传进来的轮子数进行过滤

if (wheels<=0)

    {

wheels = 1;

    }

 

_wheels = wheels;

}

 

// get方法的实现

- (int) wheels

{

return_wheels;

}

@end

5、封装的好处:

(1).使用更加简单 

(2).变量更加安全

(3).可以隐藏内部实现细节 

(4).开发速度加快

注意:属性封装了实例变量,方法封装了具体的实现代码, 类封装了属性和方法。子类可以继承父类中的方法,还可以重写(override)父类的方法。

 

二、继承

1、面向对象编程(OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

OC中一个类可以继承另一个类,被继承的类成为超类(super class),继承的类是子类(childclass),可以直接拥有父类中所有非私有成员(相关实例变量)、方法。

继承的实现  在接口中使用符号“:”。例如 

@interface Student: NSObject{ }

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,bird 类是一只动物,Dog 类也是一只动物,因此这两个类都可以继承Animal类。但是color类却不能继承Animal 类,因为颜色并不是一只动物。

 

2、代码示例:

//Bird的声明

@interface Bird : NSObject

{

@public

int weight;

}

- (void)eat;

@end

//Bird的定义

@implementation Bird

- (void)eat {

NSLog(@"吃吃吃-体重:%d",weight);

}

@end

// Dog的声明

@interface Dog : NSObject

{

@public

int weight;

}

- (void)eat;

@end

// Dog的定义

@implementation Dog

- (void)eat {

NSLog(@"吃吃吃-体重:%d",weight);

}

@end

有相同的属性和行为,抽出一个父类Animal(先抽取weight属性,再抽取eat方法)

//Animal的声明

@interface Animal: NSObject

{

@public

int weight;

}

- (void)eat;

@end

//Animal的定义

@implementation Animal

- (void)eat {

   NSLog(@"吃吃吃-体重:%d",weight);

}

@end

l        子类在父类的基础上拓充属性和方法

//Bird的声明

@interface Bird : Animal

{

@public

int height;

}

- (void)fly;

@end

 

//Bird的定义

@implementation Bird

- (void)fly {

   NSLog(@"飞飞飞-高度:%d",height);

}

@end

 

// Dog的声明

@interface Dog : Animal

{

@public

int speed;

}

- (void)run;

@end

// Dog的定义

@implementation Dog

- (void)run {

   NSLog(@"跑跑跑-高度:%d",speed);

}

@end

 

3、子类方法和属性的访问过程:

(1).如果子类没有,就去访问父类的

(2).父类被继承了还是能照常使用的

(3).父类的静态方法

(4).画继承结构图,从子类抽取到父类

(5)  .NSObject的引出:全部OC类的最终父类,包含了一些常用方法,比如+new

4、继承的好处

(1).不改变原来模型的基础上,拓充方法

(2).建立了类与类之间的联系

(3).抽取了公共代码

5、坏处:耦合性强

 

三、多态

1、多态性(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的 方法-eat;
那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
也就是不同的对象以 自己的方式响应了相同的消息(响应了eat这个选择器)。

实现多态,有二种方式,覆盖,重载。

覆盖(override),是指子类重新定义父类的虚函数的做法。

重载(overload),是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

总结:封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

2、 代码示例

Person *p = [Student new];

p->age = 100;

[p walk];

子类对象赋值给父类指针

父类指针访问对应的属性和方法

3、多态的好处

用父类接收参数,节省代码



----------------------ASP.Net+Unity开发.Net培训期待与您交流! ----------------------

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值