----------------------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培训、期待与您交流! ----------------------