有句话说: 程序员都是"懒惰"的! 小马哥无比认同,因为懒惰,所以我们思进取,把复杂的事情研究透彻,然后简单干,用一种聪明的方式重新干!
封装
面向对象就是一种"懒惰"的聪明做事方式,本质代码复用,程序员不愿意去写很多重复的代码,于是在日渐庞杂的代码工程中,将常用逻辑进行抽象,逐渐形成面向对象的思想. 你在理解面向对象之前,肯定听说过面向过程的编码方式,(顺序,分支,循环是三种基本控制结构),函数或者方法是其主要特征, 其实函数或者方法也是抽象,将常用逻辑进行抽取,实现了数据和结构的分离, 比如一个计算器函数, 运算规则定义在函数体内,多变的数据作为参数传递进去, 这就是一种封装,封装了逻辑,剥离了数据, 谁调用函数,谁就负责传递数据作为参数来使用函数,实现了函数体的复用. 同样的道理,面向对象的编程思想,也是复用,不过相比函数来说,这种封装又提升了一个级别, 对象中封装了不像函数仅仅封装一种逻辑,而是封装了多个逻辑(每一个逻辑体我们称之为成员方法),此外还封装了数据(成员属性/成员变量),这样的对象都是通过一个模板创造出来的,这个模板叫做类, 类是固定的, 通过给类的构造函数传递不同参数, 于是我们创建出不同的对象, 这样复用了类这个东东.
以上是面向对象封装的特性,封装,目的之一就实现了抽象,从而也实现了复用(函数,类都是如此);其实封装对于面向对象来说,还保护了对象实例的成员属性不被外界任意修改.
继承
面向对象还有一个继承的特点,在我看来,继承的目的还是复用,"懒惰"是一种美德,通过继承父类,我们就可以直接使用父类的成员属性和成员方法,作为子类是比父类进化更超前的一个群体,只需要有自己更厉害的更独特的成员方法就可以了,于是,作为程序员,省略掉很多时间去写重复的东西.
多态
多态的本质,还是"懒惰"的程序员用于省事,将所有的指代都用一个统一的称呼来实现,这统一的称呼笼统的泛指了一大类对象,这样做的目的在于,如果面对多变的需求,某一个类的实例不能满足当下需求,我们在变化具体实现类的时候,不同去修改所有的称呼.举个栗子,你去餐厅吃饭, 今天接待你的是小W,明天接待你的是小L,后天不一定是谁,所以,省事的做法是你不用管他(她)是谁,只管尊敬的称呼ta为服务员,就可以让服务员来帮你完成点餐,上菜,结账这些在餐厅的所有事情.
面向对象编程思想并不高深,无非是为了省事和"懒惰"所采取的一种代码策略,多体会来龙去脉,学习知识无比快.