【Java】面向对象有什么好说的?

写在前面

今天面试了宇宙条深圳的测试开发工程师校招。面试官小姐姐在提问关于Java的问题时,问到面向对象的问题,因为一直准备算法,突然间脑子就蒙了,脑子里闪过Java的各种定义,唯独想不到面向对象,所有决定查查资料写一篇文章

面向对象到底有什么好说的?

在《Java核心技术卷Ⅰ》第四章关于对象与类的叙述中,有这样一段话

面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分的隐藏的实现部分

这段话有点绕口,但是他想表达的意思却很简单,以我自己的理解来说的话。

在“面向对象”眼里,完成一个程序就好像在砍一棵树,需要起重机,需要大锯子,作为砍树的人,我们可以选择去沃尔玛买一个斧头或者是锯子,也可以选择就地取材去造一个锯子。这里的锯子就是对象(对象有自己的功能),砍树这件事本身就是程序。那我们可不可以造一台起重机呢?当然可以,如果你有能力,并且可以保证做出来的起重机不会有什么危险,那你大可自己造,nb的话造个火箭都行(只要能用)。

那面向对象就是当我们写bug..啊不..写程序的时候,如果需要实现一个功能,那么我们既可以去借鉴别人的程序来实现这个功能,也可以自己单独写一个具有这个功能的对象来实现。

原则意义上,我们无需关心对象的内部实现,调就完了。

对比一下传统意义的程序设计,传统意义上的程序设计是:通过设计一系列算法来解决问题,算法设计好后再去思考使用恰当的数据结构来存储数据。换言之就是:先确定如何操作数据,再确定如何组织数据结构,便于数据操作。

然而我们强大的OOP却反其道而行之,先确定数据,然后再考虑数据的操作方法,即先确定对象,再确定对象内部实现的方法。

面向对象的主角 ---- 类

类是构造对象的模板或蓝图,由类来构造对象的过程称为创建类的实例

在Java标准库中,提供了几千个类,这些类可以被应用于各种地方,包括用户界面设计、日期、日历、网络编程等等。但是,即使Java中的类已经辣么多了,我们在面试中还是需要去实现一个自己的类类来解决面试官大大给出的问题TAT。

封装

从形式上来看,封装是将数据和方法组合在一个包里,并对对象的使用者隐藏具体的实现方式。

对象中的数据被称为实例字段、操作数据的过程被称为方法

当我们实例化了一个类后,这个实例就会具有一组特定的实例字段值,这些值的集合被称为状态,我们可以通过调用方法来改变状态

封装的意义在于,绝对不能让一个类中的方法去访问另一个类中的实例字段,即程序只能通过对象的方法与对象数据进行交互

说来有点残忍,一个类可以完全改变存储数据的方式,只要对外公开的方法不变,其他类就完全不会关心这个类内部的变化。就好像我们间歇性的踌躇满志不会有任何人关系,他们只会关心你今天有没有来上班。

同学你有“对象”吗?

要想找到对象,首先要清楚对象的三个特性:

  • 对象的行为
  • 对象的状态
  • 对象的标识

行为
找对象无非为了亲亲抱抱举高高,那么我们可以对对象执行的行为和对对象执行的方法固然重要

状态
对象的状态不必多言,懂得人都懂

标识
如何区分具有相同行为和相同状态的不同对象,这就涉及到时间管理了...

对象的关键特性会彼此相互影响,比如对象的状态决定了你能否对他执行一些方法,就好比女朋友生气了这时候你去骂她是不合理的,因为你可能会被锤,而清空购物车则是可以执行的方法

你可能感兴趣的:(java)