iOS 开发 OC基础篇之类的特性

OC是面向对象的语言,面向对象程序设计中的类有三大特性:继承,封装,多态 。

封装:

封装就是对类中的一些字段,方法进行保护,不被外界所访问到。

OC中的类也有权限控制的功能,但基本不用,在实际开发中私有的只在.m文件中实现就好了,这意味只实现未声明。

继承:

继承是类中的一个重要的特性,他的出现使得我们没必要别写重复的代码,可重用性很高。

这个我感觉没什么可以说的,和Java一样。

多态:

 简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

多态对于面向对象思想来说,个人感觉是真的很重要,他对以后的编写代码的优雅方式也是起到很重要的作用,其实现在很多设计模式中大部分都是用到了多态的特性,Java中的多态特性用起来很是方便的,但是C++中就很难用了,其实多态说白了就是:定义类型和实际类型,一般是基于接口的形式实现的,还是看代码,这比较抽象。

iOS 开发 OC基础篇之类的特性_第1张图片
main.png

person有个feedAnimal方法,传入的是Animal的对象。Animal有个eat方法,cat和dog 是继承于Animal的。三个都实例化,person调用feedAnimal方法传入相应的对象,打印出来的是各自的类名,这就是多态的一个表现。

多态的局限性

父类类型的对象不能直接调用子类对象特有的方法,如果必须要调用,则必须将父类对象强制转换成子类对象。

iOS 开发 OC基础篇之类的特性_第2张图片
EBF92BAC-D404-4F93-92E2-DE4E4398252B.png

在Cat类中写了一个sleep方法;在main函数直接用Animal调用会报错

iOS 开发 OC基础篇之类的特性_第3张图片
EBF92BAC-D404-4F93-92E2-DE4E4398252B.png

错误提示为:No visible @interface for 'LeeAnimal' declares the selector 'sleep' 未定义该方法。

so父类类型的对象不能直接调用子类对象特有的方法,如果必须要调用,则必须将父类对象强制转换成子类对象。

ps:本文仅是我的一些理解,如有错误,望指正。

你可能感兴趣的:(iOS 开发 OC基础篇之类的特性)