面向对象编程的反向学习

今天看了篇关于面向对象编程的文章,发现自己对于面向对象编程的基础理解甚少。作者对于面向对象编程的问题描述正式我们在编写代码时需要注意的地方,于是跟着作者的思路重新梳理了一下面向对象编程的三大特性。文章地址

继承

可以使子类具有父类的属性和方法或者重新定义、追加属性和方法等。

问题-1:继承的类移植到新项目时,需要将它所有的祖先类都移过去。只能使用较浅的类层次结构,减少祖先类。

问题-2:一个子类不能同时继承于多个父类,只能从一个父类继承。A类想要继承多个类(B、C)的属性和方法,这在面向对象语言中是不可能实现的。

问题-3:基类变动会影响继承类。继承类的开发者要清楚基类是如何实现的,而且基类的每个变动都要通知所有继承类的开发者。

封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式。

问题-1:引用问题。为了提高效率,对象传递给函数时传递的是引用,而不是值。一个对象A的引用被传递给另一个对象B的函数,函数将这个对象引用放到私有变量中,用封装保护起来。但这个传递的对象A是不安全的,其他代码也可能拥有指向A对象的指针,可以修改A的值。

解决-1:B的函数必须要复制传递过来的A对象,而且不能是浅复制,必须是深复制,但这样没有效率。

多态

多个子类继承于同一个父类,重写父类的方法,可以实现不同的操作。即不同子类对同一个消息可以作出不同的响应。

如果两个类并没有相同的父类或者祖先类,想要实现同样的方法,可以使用协议和代理,这样也可以实现多态性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容