从接触 Java 开始,就有人告诉我们这是一门面向对象语言。从入门到精通,直到我们工作面试,面试官仍然会问 “什么是面向对象?”

万物皆是对象

Java 是一门十分纯粹的面向 对象语言,在 Java 中万物皆是对象。但是我不打算探讨 Java 中面向对象的细节,本文将根据几个问题来讨论 “面向对象的特性以及对这些特性的理解”

封装

什么是封装?

封装是,对成员访问进行控制,将接口与实现隔离。对外暴露使用者所需的接口,隐藏接口的具体实现。

为什么需要封装?

原因有二:

  1. 让使用者不要接触他们不该接触的部分。具体实现对于类内部是必要的,但不属于使用者所需的接口的部分。这样,使用者能清楚知道什么是他们所需要的,什么是可以忽略的。
  2. 让类库设计者知道,使用者所接触的是那些部分。在更改类库设计时,不用担心影响到使用者。

如何进行封装?

使用访问修饰符,考虑那些部分可以公开,那些部分需要隐藏。

继承

什么是继承?

继承是,根据现有的类创建新类的过程。提供继承信息的称为父类(基类),得到继承信息的称为子类(派生类)。

为什么需要继承?

代码复用是面向对象编程的优势之一,继承可以在不污染源代码的前提下复用现有的代码。

如何进行继承?

尽管继承能复用代码,但是我们应该尽量少使用继承。

在判断是否使用继承时,确定是否需要把新类向上转型为基类。如果必须向上转型,那么继承就是必要的。但是如果不需要。则要进一步考虑是否采用继承。

多态

什么是多态?

多态是,当发送消息给对象时,程序不知道接收的具体对象是什么,但是能正确执行。简单的说,就是把一个对象看成是它的基类,而不是把它当成具体类。这样就可以编写出不局限于特定类型的代码

为什么需要多态?

多态不仅改善代码的组织,提高代码可读性,而且使程序易扩展。多态能够消除类型之间的耦合,使一段代码无差别的运行在不同的类型上。

如何使用多态?

继承和对数据的抽象是多态的关键。

  1. 派生类重写基类中已有的方法或抽象方法。
  2. 使用基类引用派生类对象。这样,调用相同的方法会根据不同的派生类做出不同的行为。

抽象

什么是抽象?

将同一类对象的相同属性和行为总结出来,以此创建类的过程。

评论