谈到面向对象,不得不提到面向过程,为便于理解,我把它们对比者来看。它们分别是从两个不同的角度解决问题。
面向过程注重解决问题的每个步骤,第一步做什么,第二步做什么...最后做什么;
而面向对象更关注有哪些参与者(对象),各个参与者各自需要做什么(行为)。
同样做一件事,比如用洗碗机洗碗。
面向过程的思维会把整个任务拆分成一系列具体的步骤(函数),比如:
1、打开洗碗机;
2、放入脏碗;
3、启动洗碗机。
面向对象的思维会分析出具体的对象,人、碗、洗碗机。人要做的就是打开洗碗机并把碗放入其中并启动洗碗机;洗碗机负责洗就完了。
封装
内部细节对外隐藏,对外提供公有访问接口,外部调用无需修改或关心内部的具体实现。
继承
子类继承了父类就默认有用父类的属性或方法(受访问修饰符限制),子类可以对继承的属性或方法进行改变或扩展(覆盖或重载)。
多态
基于对象所属类的不同(继承或实现接口),当调用对象的某个方法,实际执行的逻辑不同。
如:父类引用指向子类对象,运行时实际执行的是子类的方法。重写、重载等都可看作是多态的特性。
总结
可以看出它们有各自的特点面向过程简单直接更高效,面向对象有更高复用性、扩展性和可维护性。