博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象的三大特征
阅读量:6412 次
发布时间:2019-06-23

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

hot3.png

封装

封装性就是隐藏实现细节,将属性私有化,提供公有方法访问私有属性。

封装属性语法

向外部提供设置属性的set方法

 

- (void)setName: (NSString *)name;

 

向外部提供访问属性的get方法

 

- (NSString *)name;

关联关系

关联关系是类与类之间的关系

一个类中包含另一个类的对象就是关联关系

关联关系是开发中最为常用的对象与对象间的关系

关联关系示例1

女孩打电话给土豪

找出这一示例中必须存在的对象

关联关系示例2

女孩开车

女孩玩ipad

分析出下面两个场景中的对象

关联关系适用场景

当一个对象与另一个对象是拥有关系的时候

女孩拥有电话

学生拥有成绩

土豪拥有宝马汽车

依赖关系与关联关系的区别

关联关系是对象与对象之间的比较高的依赖性

与对象作为参数相对来说,对象与对象之间的依赖性就较之组合的依赖性更低

 

Self关键字

能够访问类自身的成员变量

能够调用类自身的方法

谁调用self,self就指向谁

Self关键字一定是类的方法中使用

 

继承性

OC中的类都继承自NSObject

继承性是类与类之间的关系—对象与对象之间的关系

OC中只有单继承

 

继承语法

@interface Iphone1 : NSObject

{

    NSString * _OSVersions;   //系统版本号

    int _cpu;                 //cup

    int _ram;                 //内存

}

//后置摄像头

(void)backCamera;

//拨打电话

(void)sendSignal:(NSString *)number;

//发送信息

- (void)sendMessage:(NSString *)message;

@end

 

通过继承扩展功能

typedef enum

{

    kFlashlightStatusClose,

    kFlashlightStatusOpen,

    kFlashlightStatusAuto

    

}FlashlightStatus;

 

@interface Iphone2 : Iphone1

{

    FlashlightStatus _flashlightStatus;   //闪光灯状态

}

//闪光灯

- (void)flashlight:(FlashlightStatus)status;

//前置摄像头

- (void)frontCamera;

@end

重写父类方法

@implementation Iphone2

 

- (void)backCamera

{

    if (_flashlightStatus == kFlashlightStatusOpen)

    {

   }

    else if (_flashlightStatus == kFlashlightStatusClose)

    {

    }

 

   NSLog(@"拍摄照片");

 

}

@end

Self关键字

@implementation Iphone2

 

- (void)backCamera

{

    if (_flashlightStatus == kFlashlightStatusOpen)

    {

        [self openFlashlight];

    }

    else if (_flashlightStatus == kFlashlightStatusClose)

    {

        [self closeFlashlight];

    }

 

    NSLog(@"拍摄照片");

}

@end

 

Super关键字

@implementation Iphone2

 

- (void)backCamera

{

    if (_flashlightStatus == kFlashlightStatusOpen)

    {

        [self openFlashlight];

    }

    else if (_flashlightStatus == kFlashlightStatusClose)

    {

        [self closeFlashlight];

    }

 

    [super backCamera];

}

@end

多态性

使用父类的指针变量保存子类对象

使用该指针调用父类中声明的方法和变量

如果子类中重写了父类中的方法,那么在调用这个方法的时候,将会调用子类中的这个方法

多态依赖于继承关系而存在

动态确定数据类型

多态语法

父类指针变量保存了子类对象

Iphone1  * ip1 =  [Iphone2 new];

方法参数的多态性

 

@implementation Person

 

- (void)feedAnimal:(Animal *)animal

{

    [animal eat];

}

 

@end

使用Animal *作为方法的参数,那么我们可以传入Dog,Cat,Tiger之中的任何一个对象

传入的是哪个对象,

就会调用哪个对象的eat方法

 

转载于:https://my.oschina.net/itcastBlogs/blog/650381

你可能感兴趣的文章
DB2各版本下载地址
查看>>
老李秘技:loadrunner回放脚本错误提示Error: "HTTP Status-Code 500"
查看>>
配置iscsl服务,编写udev规则,配置并访问NFS共享,配置FreeNAS服务
查看>>
java后台框架 springmvc mybatis(sqlsever oracle 和 mysql数据库) HTML5 bootstrap 全新高大尚...
查看>>
ReportNG 支持中文处理技巧
查看>>
Java 面向对象 之 多态实例2
查看>>
Linux 的发展基本知识及哲学思想
查看>>
PHP 随机用户名账号的生成
查看>>
地址解析协议ARP
查看>>
RC 和 Beta认识
查看>>
输入一串随机数字,然后按千分位输出。
查看>>
流程控制案例
查看>>
进程与线程
查看>>
linux部署时间服务器出现错误no server suitable for synchronization found
查看>>
日志备份和按时间删除日志脚本实现
查看>>
cd in bash
查看>>
rspamd 动态 add_header
查看>>
降低Redis内存占用
查看>>
Docker仓库Harbor配置LDAP并开启TLS认证
查看>>
NTLDR is missing
查看>>