一、面向对象和面向过程的区别
- 面向过程:面向过程性能比面向对象高。因为类调用时需要实例化,有额外的开销,比较消耗资源,所以当性能是最重要的考量因素时,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。
- 面向对象:由于面向对象有封装、继承、多态的特性,所以可以设计出低耦合的系统,使系统复用性高、而且更加灵活、更加易于维护。
注意:Java性能差的主要原因并不是因为它是面向对象语言,面向过程也需要分配内存,计算内存偏移量,主要原因是:Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码。而面向过程语言大多数是直接编译成机械码在电脑上执行。
面向对象编程图示:
二、对象实体与对象引用有何不同?
-
new创建对象实例,对象实例在堆内存中,一个对象实体可以有多个对象引用。
-
对象引用指向对象实例,对象引用存放在栈内存中,一个对象引用只能指向0个或1个对象实体。
三、面向对象的三大特征
1、封装
封装是指把一个对象的状态信息,也就是属性,隐藏在对象内部,不允许外部对象直接访问对象的内部信息。同时提供一些可以被外界访问的方法来操作属性。
通过封装,将事物分类成独立个体,符合人们的思考习惯,将复杂的问题简单化。封装也符合开闭原则,对提供方提供扩展开放,对使用方关闭修改。
2、继承
继承是使用已存在的类定义作为基础,建立新的类,新类可以增加新的数据。通过使用继承,可以快速地创建新的类,提高开发效率。
同时,使用继承可参考遵循里氏替换的设计原则。
里氏替换原则
定义:如果对每个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
里氏替换原则告诉我们:
(1)在使用继承时,遵循里式替换原则,在子类中尽量不要重写父类的方法。
(2)里式替换原则告诉我们,继承实际上让两个类耦合增强了,可以用聚合,组合,依赖来解决问题。
3、多态
多态,顾名思义,表示一个对象具有多种的状态。
具体表现:
1、要有继承;
2、要有重写;
3、父类引用指向子类对象;
多态的优点:
1、可替换性:多态对已存在的代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2、可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的使用。
3、接口性:多态是超类通过方法签名,向子类提供一个共同接口,由子类来完善或者覆盖它而实现的。