博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黑马程序员——面向对象编程三大特性
阅读量:4493 次
发布时间:2019-06-08

本文共 3032 字,大约阅读时间需要 10 分钟。

黑马程序员——面向对象编程三大特性

 

------- android培训、IOS培训、期待与您交流! ----------

面向对象编程三大特性:封装,继承,多态,(抽象)

***封装的概念与原理***

   封装是面向对象的特性之一

   封装的好处:降低数据被无用的可能性,保证数据安全性

   不封装的缺点:会把自己的属性暴露给外部,失去对该属性的管理权

封装原理:实例变量默认只能被当前类的对象方法访问

**封装实现**

定义设置实例变量(setter)方法和访问实例变量(getter)方法

 

1)setter(设置器)

   在开发过程中,考虑到安全性要求,一般不在成员变量面前使用@public、@protected等关键字修饰,而是使用set方法来为对象提供成员变量的值。在set方法内部可以对一些不合理的赋值进行过滤筛选

   set方法作用:为外界提供一个设置成员变量值的方法

   命名规范:

   1)方法名必须以set开头

   2)set后面跟上成员变量名称,首字母大写:_name    setName

   3)返回值一定是void,不能有返回值

   4)一定要接受一个参数,而且参数类型需要成员变量的类型一致

   5)形参名不能和成员变量名一样(官方推荐成员变量名前加_)

对set中,成员变量设置值,要用set方法

 

2)getter(访问器)

   命名规范:

   1)一定有返回值,返回值类型和成员变量一致

   2)方法名和成员变量一样(去掉下划线的)

   3)不需要接受任何参数

   4)get方法实现中,一定是返回实例变量值

   5)是一个对象方法

以后获取值,统一使用get方法

1 #import 
2 @interface Person:NSObject 3 { 4 //年龄 5 int _age; 6 //身高 7 float _height; 8 } 9 //给每一个实例变量定义两个方法:设置变量的方法(set),获取变量值得方法(get)10 //set规范:11 /*12 1)一定是一个对象方法13 2)返回值一定是void,不能有返回值14 3)方法名必须以set开头15 4)set后面跟上成员实例变量名称,首字母大写16 5)一定有参数,而且参数类型需要成员变量的类型一致17 6)形参名一般是去掉下划线的实例变量名18 7)形参名不能和实例变量同名19 8)set方法实现中,一定要用形参给实例变量赋值20 */21 -(void)setAge:(int)age;22 -(void)setHeight:(float)height;23 /*get命名规范:24 1)一定有返回值,返回值类型和成员变量一致25 2)方法名和成员变量一样(去掉下划线的)26 3)不需要接受任何参数27 4)get方法实现中,一定是返回实例变量值28 5)是一个对象方法29 */30 -(int)age;31 -(float)height;32 @end33 @implementation Person34 //set方法实现35 //set方法实现中,一定要用形参给实例变量赋值36 -(void)setAge:(int)age{37 _age=age;38 }39 -(void)setHeight:(float)height{40 _height=height;41 }42 //get方法实现43 //get方法实现中,一定是返回实例变量值44 -(int)age{45 return _age;46 }47 -(float)height{48 return _height;49 }50 @end51 int main (int argc, const char *argv[])52 {53 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 54 //在此处输入Objective-C代码55 Person *p=[Person new];56 [p setAge:20];57 [p setHeight:2.12f];58 NSLog(@"%d,%.2f",[p age],[p height]);59 [pool drain];60 return 0;61 }

 

 

 

类的继承与派生

***继承***

   概念:类B继承了类A, 那么类B具有类A的所有属性和方法。A派生了B

优缺点:

   继承的好处: 子类拥有父类的所有成员变量和方法, 减少重复代码. 建立类之间的关系。

   继承的缺点: 代码耦合性太强 (类之间的关系太紧密, 如果某个类坏了, 另一个类会受影响)。

   NSObject是基类, 几乎所有的类最终都是继承于它。

   继承注意事项:

   1、子类不能定义和父类同名的变量,但可以继承父类的变量

   2、OC类支持单一继承,不支持多继承,只能有一个父类

   3、OC支持多层继承

 

***多态***

概念:多态就是某一类事物的多种形态,不同的对象以自己的方式去响应相同名称方法的能力成为多态

 

条件:有继承关系,有方法重写,

     父类的指针指向子类函数的对象

   Dog *g=[Dog new];

   Zeo *z=[Dog new];

优点:简化编程接口,容许在类与类之间重用一些习惯性的命名

@interface Animal:NSObject

-(void)run;

@end

@implementation Animal

-(void)run{

 NSLog(@"动物在跑");

}

@end

********狗*******

子类继承不用再声明了

@interface Dog:Animal

-(void)run;//(可以不用写)

@end

@implementation Dog

-(void)run{

 NSLog(@"狗在跑");

}

@end

********猫*******

@interface Cat:Animal

-(void)run;//(可以不用写)

@end

@implementation Cat

-(void)run{

 NSLog(@"猫在跑");

}

@end

**********不使用多态************

Animal *ani=[Animal new];

[ani run];

Dog *dog=[Dog new];

[dog run];

Cat *cat=[Cat new];

[cat run];

***********使用多态**********

//父类指针指向子类对象

Animal *a1=[Dog new];

[ani run];//狗在跑

Animal *a2=[Cat new];

[ani run];//猫在跑

 

多态注意:

1、如果存在多态,父类是可以访问子类特有的方法

   但是编译器会报错,需要强制转换:[(子类名 *)指针名 子类特有属性];

2、如果不存在多态,父类不可以访问子类特有方法

 

------- android培训、IOS培训、期待与您交流! ----------

转载于:https://www.cnblogs.com/gaozp/p/4904616.html

你可能感兴趣的文章
【转载】MAC OS开启关闭ftp命令
查看>>
运维之扩容与升级
查看>>
如何理解JAVA的跨平台特性
查看>>
V2EX iOS客户端应用源码
查看>>
ASP.NET 页面异步任务
查看>>
(13) openssl ca(签署和自建CA)
查看>>
编译安装git
查看>>
《Linux内核分析》 第三节 构造一个简单的Linux系统MenuOS
查看>>
RPC是什么?
查看>>
CLR via C#:CLR的执行模型
查看>>
JS获取服务器时间
查看>>
如何对数据排序和拆分文件
查看>>
数据解析01-15
查看>>
linux 安装mysql数据库——yum安装法
查看>>
Several ports (8005, 80, 8009) required by Tomcat v6.0 Server at localhost are already in use
查看>>
事件监听器
查看>>
设计模式之单例设计模式
查看>>
异常的基本概念
查看>>
vue 在发送axios请求时数据渲染问题
查看>>
动态链接库dll
查看>>