一、什么是面向对象
解释什么是面向对象前我们先谈谈什么是面向过程。面向过程从字面就可以看出它是着重强调 过程 过程 过程的,它要求我们在解决问题时必须写明解决问题的过程。举个例子:求1+2+…+n的和。
int add(int n){
n&&(n+=add(n-1));
return n;
}
暂且不论代码的正确性和编程复杂度。上面这段代码就是我们为了解决上面那个问题提出的解决方法而且它不是封闭的,别人能看到详细的解决过程,这就是面向过程。
说完了面向过程,我相信各位对面向对象有了一定自己的看法。首先我们来看看对象是怎么定义的。
对象 : 由数据和容许的操作组成的封装体,与客观实体有直接对应关系。 对象: 由数据和容许的操作组成的封装体,与客观实体有直接对应关系。 对象:由数据和容许的操作组成的封装体,与客观实体有直接对应关系。
这里作者要强调的是客观实体,特别注意他不是一个简简单单的实例。它应当具有一个客观实体该有的全部特性,所以我们这里的面向对象指的就是面向客体。
那它跟面向过程有什么区别?很简单,面向过程是开放的,而面向对象是封闭的,它仅仅提供了可供调用的API,而具体实现细节都是封闭的。因此面向对象具有封装的特性。
ps:上面的求和代码是典型的位运算的短路特性。上面代码仅可在c语言和c++下运行,java需要单独定义一个boolen变量来接收判断语句。
二、为什么用狼人杀和血染钟楼来解释面向对象
因为作者感觉这样可以让面向对象去复杂化并且增加趣味性。
举个例子,你可以把对象理解为狼人杀中的身份,每个身份的技能都是事先定义好的,你不知道也不需要他为什么会这个技能(封装的意义),你只需要会用这个技能即可(api)。
三、JAVA怎么实现面向对象
其实作者感觉这是句废话,因为Java就是以类为基本单位的,main(入口)就是定义在类中的,所以Java本质上就是以面向对象为基础来进行开发的。
所以在Java中类就是实现面向对象的方法,因为类是对象的抽象,对象是类的实例化。
public class HelloWorld{//主体就是类
public static void main(String[] args){//main方法是定义在类内的
System.out.print("HelloWorld!");
}
}
这就是用Java写的HelloWorld类,虽然没有实例化对象,但是还是可以看出Java是以类为基础的。
ps: m a i n main main方法前的 s t a t i c static static有什么作用?不加上行不行?