黑马程序员--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培训期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值