我们先来初步了解一下面向对象
初识面向对象
面向对象,他是我们开发的一种编程思想
编程思想
- 面向对象 : 就是一种编程思想
- 面向过程 : 也是一种编程思想
前言
学习面向对象,最重要的是理解,基于面向对象的编程思想,不断结合,使得语法认知更加透彻,并细致入微总结每一个语法点,关于面向对象的语法,前期需非常努力,后期也会持续加强,但学习时不可以疏忽懈怠
面向对象类和对象的概念理解
给大家一个概念,什么样算是面向对象呢?
生成一辆汽车过程示例
它包括了生产汽车的全部过程方法组成等等等等
这里,了解一下就行
为什么要面向对象?
我们做开发的,刚开始学,都会听说到“面向对象”这种方法,那么,这个思想到底好在什么地方呢?
面向对象三大特征
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
这里是面向对象编程思想的三大特征,不过,先别着急深入了解,我们现在是只要知道有这个东西就可以!
我们上面提到了,面向过程思想,我们先来解释一下它!
面向过程:做某件事情都需要自己亲历亲为,按照步骤去完成
面向对象:做某件事情不需要自己亲历亲为,只需指定特定的对象去完成即可。
思维展开
看到这里我们就要真正开始去认识面向对象了
首先,记住一个思想:万物皆为对象
现实世界就是由对象组成的,如下图,万物皆对象
一个人,一张纸,一支笔,都是可以作为对象,可以说是个东西(虚拟化的东西也算,比如:语言)或者说,只要可以语言描述出来的,就可以是一个对象
我们都知道,这是个开发思想,我们用这种思想开发程序的好处是:
1.交流更加流畅
2.提高设计和开发效率
3.面向对象的思想符合人类思维习惯
这些理论要是实在不理解的话也没有关系,我说得再明白一点:地球、你、我、它、东西、万物,这些就是对象
什么是对象不重要,我们是要去面向对象
对象与类
好了,对象知道了,那我们怎么去面向它呢?
这里,我们要提到一个东西:类
有人说,这个熟悉啊,我们编程开始不就是要创建一个类吗?
可是,你知道什么是类吗?
什么是类?
类是对某一事物的描述,是抽象的,概念上的定义
说到这,你可能还是不知道类是什么,那就从实际出发,我们常常说:“物以类聚,人以群分”,这句话中,你可以知道,类就是具有相同点或者相同属性的事物的一个集合比如说,学生,这就是一个类,每个学生之间,都有共同的,都是来学习的,都需要读书,都需要考试,被人统称为“学生”,所以我们一说“学生”,说的就是所有符合学生特点或者属性的事物
而我们的对象,是实际存在的该事物的个体,是具体的、现实的,也就是说,他是看得见摸得着的
例:学生类
为了让大家更好理解面向对象,我单独举例讲解一下“学生”这个“类”
学生是一个类,而对象既是具体的每一个学生。
如果我现在说:学生类出来,有人会答应嘛?
但是如果我说:学生张三出来,那么张三就会知道在叫他。
属性: 描述该事物具有的信息。
行为:该事物能干什么。
注意:在java中,类是最基本的单位,所有我们要学会用类描述事物。
事物 → 类
属性 → 成员变量
行为 → 成员方法
面向对象与面向过程理解图
这里给大家放一张图
大家观察这幅图,不难看出:第一个框图从起床到去上课坐车,每一步的动作都很具体;而第二个框图,我们只需要将衣服放入洗衣机,然后洗完再将衣服拿出来即可。那么第一幅框图我们就可以把它看作是“面向过程”,而我们的第二幅款图则就是我们今天的主角“面向对象”
那么二者有何区别呢?
面向过程思想:做一件事情的每一步我们都是参与者,关注的是解决问题的过程。
面向对象思想:只关注最终结果。
看完这个图,应该对面向对象有一个大概的认识了吧!
所谓面向对象,就是让一个对象展开来,包括这个对象的行为、操作、外貌、颜色、特点.....等等等等
举个浅显的例子:“笔记本”对象
我们面向这个笔记本,一眼看去,可能是褐色也可能是黑色,这里算他是个黑色的吧。
认真的看它,会知道它长宽高等等信息,这是对象的表层!
我们面向这个笔记本展开来,里面有一张张的纸,每张纸有不同的内容,内容有各种各样,有日记有草稿有笔记
继续深入,这个笔记做得怎么样,字写得怎么样
....太多了,这里就不再深入了
笔记本的外层将笔记本封装起来,甚至还有锁
我们不打开笔记本,就不知道里面的内容,或者说密码只有自己知道
所以,这就是为什么面向对象安全性高的原因
假设我们可以导入这个对象,并且调用它,然后输出它
那么,就可以输出笔记本里面的所有内容了,注意,是所有!
Java演示面向对象
题目:把大象装进冰箱
接下来让我们用面向对象的思想来分析一下:
1.都有哪些类?
类:大象类、冰箱类、OOPDemo
2.每个类中都有哪些行为(方法)
大象类:吃草、走路
冰箱类:开门、关门
OOPDemo:装大象的方法 main
3.类与类之间有怎么样的关系
源码展示:
大象类:
public class ELephant {
//我们就假设大象有以下两种行为
public static void eat() {
System.out.println("吃东西");
}
public static void waLk() {
System . out . println("走路");
}
}
冰箱类:
public class ICEBox {
public static void openDoor() {
System.out.println("打开冰箱]");
}
public static void closeDoor() {
System.out.println("关闭冰箱门]");
}
}
OOPDome:装大象的方法main
public class OOPDemo {
public static void putin(ELephant eLephant) {
System.out.printLn("装大象");
}
public static void main(String[] args) {
//面向过程
System.out.printLn("打开冰箱门");
System.out.printLn("装进大象");
System.out.printLn("关闭冰箱门");
System.out.printLn("----------------- ");
//面向过程
//调用冰箱门行为
ICEBox.openDoor();
//装进大象
putin(new ELephant());
/ /关闭冰箱门行为
ICEBox.closeDoor();
此处,我分别用来面向对象和面向过程两种方法,方便大家理解
输出的结果:
打开冰箱门
装进大象
关闭冰箱门
----------
打开冰箱门
装大象
关闭冰箱门门
大家可以看到,面向过程和面向对象产生的结果一样,那么就会有人问了,两者产生的结果一样那么为啥还有用面向对象?
那我这样说吧:现在我们只是进行了装大象,那么如果我们后续还有进行装猴子、装小狗、装老虎等···,难道是我们还要一遍一遍的去打印嘛?我们用面向对象的思想,提前设置好类,等到用的时候,不管是装什么,都可以直接调用,岂不是更方便!
记住,这个文章看不懂没有关系,我们的目的是了解面向对象,慢慢来!