JAVA基础核心-理解类、对象、面向对象编程、面向接口编程
什么是类,什么是对象,什么是面向对象编程,什么是面向接口编程。学习面向对象思想的语言,比如java,第一关可能就是要理解这些概念。下面就来好好琢磨一下。
类和对象的概念
首先总结一下:类是一个模板,对象就是用这个模板创造出来的东西。
比如,男孩,他就是一个模板,男的就行,那么对象是什么呢?就是具体某个男孩,比如男孩BOB
,男孩fourColor
.
请看下面一张图:
男孩女孩是比较抽象的概念,是模板,左边一排就是其具体的一些对象。你看长的都不一样,有的黑,有的白,有的高,有的矮,国家地区也不一样。但是他们都属于男孩或者女孩。
那么同理,人就是一个类,男孩女孩就是人的子类,因为人可能不仅包括男孩女孩,还包括第三性别这个类。
这里还引出了JAVA特性中的继承。继承简单理解就是父类有的东西(访问级别不能是private)的,那都是你的。比如你老爸的房子,就是属于你的,你出入自由。
人还可以分为胖人和瘦人这个子类。所以只要是抽象的模板,就是一个类。
- 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
下面就拿狗这个类来说事。狗是动物这个类的子类。
Java中创建类
构造器方法说明
需要创造一个类对象出来的时候,要用到这个类的构造器方法,那么啥是构造器方法呢?构造器方法就是创造类时的初始化方法,和类同名的方法,你可以在里面写自己的代码
1 | //模版 |
一个相对比较完整的类
1 | //模版 |
创建对象
语法:
类名 对象名 = new 类名() ;
举例:
1 | Dog fourcolor ; // 先声明一个 Dog 类的对象 fourcolor |
通过Dog
这个类可以创造出fourcolor
对象.下面我才能操作这个对象:
1 | //让它的颜色为黑色 |
面向对象
在理解了什么是类,什么是对象,就可以来说说面向对象到底是什么了。
先来说说面向过程,大家都学习过C语言。C语言就是典型的面向过程的语言。
举个例子:要把大象装进冰箱里,这件事,面向过程的程序员是这样思考的:
- 把冰箱门儿打开。
- 把大象装进去。
- 把冰箱门儿关上。
上面的每一件事都用一个函数来实现。抽象为下面三个函数:
- openTheDoor();
- pushElephant();
- closeTheDoor();
这样不挺好的吗?为什么不用面向过程的这种思维来编程呢,还要搞出什么面向对象来。
需求又来啦:
- 「我要把大象装微波炉里」
- 「我要把狮子也装冰箱里」
- 「我要把大象装冰箱,但是门别关,敞着就行」
这个时候,面向过程的程序员就悲剧了,来一个需求我就写一个函数,我还能下班吗?
面向对象从另一个角度来解决这个问题。它抛弃了函数,把「对象」作为程序的基本单元。
面向对象的世界里,到处都是对象。即:万物皆对象。
比如人这个类,每个具体的人(对象)都要有这样的属性:身高、体重、年龄。每个人都有这样的行为:吃饭、睡觉、上厕所。
那么,这些通用的属性+方法可以构建一个模板:人这个类。因为每个具体的人(对象)都需要这些基本的东西。当然了,每个人具体什么身高、什么体重、吃什么都是不一样的,所以每个对象一般都是不一样的。但是模板是一样的。
那么,回到刚才的需求,面向对象是如何思考这件事的呢?
- 向冰箱下达「开门」的命令。
- 向大象下达「进冰箱」的命令。
- 向冰箱下达「关门」的命令。
就是说,我不用亲自管开门的细节,我只要叫他开门即可。
但是不禁要问:怎么实现这种下达命令就可以自动去执行的效果呢?或者说,我怎么知道它有这个功能啊!
面向接口编程
现在我们把「数据」和「行为」都封装到了对象里,相当于对象成了一个黑匣子,那我们怎么知道对象具有什么样的能力呢?这个问题的关键就是接口。
因为无论是把大象装进洗衣机还是冰箱,都要求洗衣机或者冰箱有开门和关门的功能。这个时候,我们就可以抽象出来一个接口:【自动门】。这个接口里面定义两个能力:【开门】和【关门】。
让洗衣机、冰箱、微波炉这些带门的东西全部实现【自动门】接口。
这个时候,每个具体的实现可能略有不同,比如冰箱开门是往外拽,但是洗衣机开门可能是往上翻盖子。
此时,我有一个需求,把大象放进冰箱。我一看,冰箱实现了【自动门】这个接口,里面有【开门】和【关门】两个方法,ok,我知道冰箱是可以开门和关门了,那就好办了。我直接下达命令即可。还是跟上面一样的步骤.
- 向冰箱下达「开门」的命令。
- 向大象下达「进冰箱」的命令。
- 向冰箱下达「关门」的命令。
此时,需要将狮子也装冰箱里。那还是一样:
- 向冰箱下达「开门」的命令。
- 向狮子下达「进冰箱」的命令。
- 向冰箱下达「关门」的命令。
此时,我要把大象装冰箱,但是门别关,敞着就行,那就:
- 向冰箱下达「开门」的命令。
- 向大象下达「进冰箱」的命令。
是不是很方便?冰箱也可以换,我可以换成任何东西,只要实现了这个接口,这些东西就都有这些能力,那我才不管里面到底怎么实现的呢,直接下达【开门】【关门】命令即可。
这也引入了JAVA特性中另一个特性:封装。外界不知道里面实现细节,只需要知道它的功能和入参即可。
这就是面向过程和面向对象编程的区别,也顺带地理解了什么是面向接口编程。这是学习JAVA最基础也是最核心的点。
整理自: