1.“面向对象”和“基于对象”
详细理解看前半部分;考试/面试答案直接看后半部分。
1.1 详细理解:
1.1.1 简单对比:
面向对象具有三个特征:封装、继承、多态。
基于对象只有:封装。
所以,两者共同点:封装。不同点:继承、多态。最本质的不同:继承。
1.1.2 详细解释:
首先,解释几个名词:
对象:属性和行为的集合体,即具有某些属性,可以实现某些行为。是抽象形成的一个整体。如将猪定义为一个对象,它具有一些属性:重量、年龄、性别等。它也有一些行为:如吃饭、睡觉等。当然,这里定义的是一个类,猪是一个类。那么我通过new方法产生了一头猪:佩奇。佩奇就是一个对象。
再仔细解释一下类和对象之间的关系:对象是面向对象方法中最基本的概念,它的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。类是具有共同属性、共同方法的对象的集合。类是对象的抽象:对象则是类的实例。而类是整个软件系统最小的程序单元,类的封装性将各种信息细节隐藏起来,并通过公用方法来暴露该类对外提供的功能,从而提高了类的内聚性,降低了对象之间的耦合性。
封装:封装将对象的实现细节隐藏起来,并通过一些公用方法来暴露该对象的功能。即让使用者知道可以实现某个功能,却不必了解具体的实现方法。比如:猪吃饭的方法,这个方法需要使用者提供食物,该方法的目的是使猪处于饱的状态。那么使用者只要提供食物并调用该方法即可,并不需要关心猪是怎么吃饭的,吃了几口,如何咀嚼等。
继承:继承是指一个类可以通过继承成为另一个类的孩子,即子类,被继承的称为父类。子类直接获得父类的属性和方法,同时也可以拥有自己单独的不同于父类的属性和方法。
多态:多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的信给我特征,这意味着同一个类型的对象在运行时可能表现出不同的行为特征。
“面向对象”和“基于对象”的相同之处在于都存在对象的概念,都具有“封装”这一特征。但是“基于对象”不存在“继承”,即无法利用现有的对象模板产生新的对象类型,也自然无法继承产生新的对象。而“多态”表示为父类类型的子类实例,没有继承自然也就没有多态。即“面向对象”必然会有封装、继承、多态三个特征,而“基于对象”只有封装。例如JavaScript语言是基于对象的,它使用一些封装好的对象,调用对象的方法,设置对象的属性,但无法派生新的对象类型,只能使用现有对象的方法和属性。
注:部分参考《疯狂JAVA讲义》