前言
今天被面试官问到了什么是面向对象,谈谈我的理解,对于背了一段时间八股文的我其实是有点懵的,导致自己没有回答好,所以回来后研究了一下究竟怎么去回答比较好。
我的理解
1. 比较
为了更好的体现出面向对象,那就不得不提起面向过程了,毕竟有比较才能更好体现出我们对面向对象的理解
假设拿我写csdn博客这件事来说
如果是面向过程的步骤:
1.我打开csdn
2.我用文本编译器开始编译文本
3.我用电脑发表文章
如果是面向对象呢?
我们不会专注于我们是怎么去这一件事的过程,而是关注我们每一个对象,然后我们每个对象都做了什么,就像是把工作分配给我们不同的对象,然后每个对象去完成不同的功能一样
同样一件事,面向对象是怎么做的?
我:打开了csdn,使用电脑去编辑文本
电脑:按照我的操作实现功能
csdn:审核并发布我的文章
区别:体现的思想不同
面相过程的思维方式,它更加注重这个事情的每一个步骤以及顺序。
面向对象的思维方式,它更加注重事情有哪些参与对象,需求里面有哪些对象,这些对象各自需要做些什么事情。
2.三大特性
讲完面向过程和面向对象的区别之后,还能讲讲三大特性
面向对象的三大特性:封装,继承,多态
2.1 封装
什么是封装?
通过访问修饰符(如 private)来修饰成员变量和成员方法,将不需要对外提供的内容都隐藏起来,提供公共方法对其访问。
还是拿刚刚那件事来说,电脑内部是如何去实现我们操作的功能的,而我们知道它可以实现我们的操作功能,可是我们并不需要知道具体内部是怎么实现的,我们只要知道这些是用来干什么的就好。这就是封装
好处: 隐藏实现细节,提供公共的访问方式,提高了代码复用性和安全性
2.2 继承
什么是继承
在 Java 中子类使用关键词 extend 去继承父类的关系。
假设小明爸爸有100万,小明爸爸去世后继承了他爸爸这一百万的财产,这就叫继承。
***好处:***提高了代码的复用性
2.3 多态
什么又是多态:
多态是同一个行为具有多个不同表现形式或形态的能力。多态还是是同一个接口,使用不同的实例而执行不同操作。
假设还是这个小明,这个小明继承了他爸爸一百万遗产后,整天不务正业没吃喝嫖赌,很快就花光钱去睡大街了。
可是又假设这个小明拿到一百万后,好好努力,拿到钱去创业,最后成功成为了亿万富翁。
这就是多态的体现,根据这个小明不同的行为体现出不同结果,这就是多态的体现。并且这个例子在侧面的体现出继承是多态的基础。小明后续的行为都是在继承爸爸一百万之后这个基础上进行的。
好处: 提高了代码的可维护性和复用性
3.创建对象的方式有哪些?
在这之后我们还可以讲讲创建对象的方式有哪些来体现我们知识丰富
1.new出一个对象出来
2.利用反射来创建对象:
1.获取class对象
2.使用Class对象获取指定的Constructor对象
3.使用Class对象的newInstance()方法来创建该Class对象对应类的实例
3.利用反序列化创建对象
这里要先讲讲序列化
ObjectOutputStream 将要序列化的对象转换为某种数据,然后通过FileOutputStream 连接某磁盘文件,再对象转化的数据转化为字节数据再将其写出到磁盘文件。最后是实现持久化,这就是序列化。
序列化是为了我们可以存储,而反序列化,就是为了让我们可以再次使用它们。
主要用到的流是FileInputstream和ObjectInputstream正好与存储时用到的流相对应。反序列化后得到对象的顺序与序列化时的顺序一致。
4.clone创建对象