夯实Java:从面向对象提及

做者:伯特
出处:github.com/ruicbAndroi…
声明:本文出自伯特的《LoulanPlan》,转载务必注明做者及出处。java

刚学习 Java 那会就接触了“面向对象”的概念,但当时并无太多实战经验,因此对其的理解也仅限于概念。当工做两年后再回顾一下,有些概念可以落地了,遂记录一下,做为 LoulanPlan 的开篇。git

1. 什么是面向对象

面向对象是一种程序设计的思想,而不是一种方法,亦或准则。其指导咱们从现实世界中客观存在的事物出发,进行程序设计。github

2. 什么是对象

Everything is Object,在 Java 语言的世界中,万事万物皆对象。上面提到“从现实世界中客观存在的事物出发”,这里客观存在的事物,咱们称之为“对象”。编程

在程序中,对象是程序的基本构成单元,是客观存在的事物的体现。一个对象一般由一组属性和对这组属性进行操做的若干服务(方法)构成。bash

3. 面向对象与面向过程的出现

面对简单的软件程序,咱们每每不须要考虑过多的设计,任何一个小的功能单元或模块,均可以按照必定的步骤去实现,这种 step by step 的方式即为面向过程。ide

随着程序的复杂性提高,咱们没法按步骤去描述并实现编码,因此面向过程已没法适应。加之考虑到代码的可读及复用性等,便有了对象的概念,以及面向对象的编程思想。学习

固然,还有面向组件、面向服务等设计思想,不在此讨论。ui

4. 面向对象与面向过程的区别

要知道,两者并非非此即彼,而是相辅相成的。编码

面向对象思想要求咱们从宏观上进行程序设计,抽象出一个个“对象”。而面向过程,则在微观上对“对象”内部进行具体的实现。spa

能够看出,面向对象最终仍是离不开面向过程。

举例来讲,须要编程实现绘制圆形、三角形、矩形。

面向过程实现:

drawCircle... //一坨绘制相关的代码,下同
drawTriangle
drawRect
复制代码

面向对象实现:

//抽象出画笔对象
class Painter {
    drawCircle(){
        //上述面向过程实现,下同
    }

    drawTriangle(){}

    drawRect(){}
}

//面向对象,使用画笔绘制
1. painter.drawCircle() //此处只须要调用对象的方法,下同
1. painter.drawTriangle()
2. painter.drawRect()
复制代码

5. 对象与类

前面介绍了对象以及面向对象,下面回到 Java 中聊聊的概念。

5.1 类

咱们常说“物以类聚”,表达“ 同类的东西聚在一块儿”。其实 Java 中的类也能够这么去理解:“物”即客观存在的“对象”,同类物体的特征描述,即为“类”。

上面是个人我的理解,用术语归纳就是:类是客观事物的抽象,或者说是对现实生活中事物的一种描述(属性和行为)

例如前面定义的 Painter 类,是对客观事物画笔的抽象,包含了一些绘制的方法(行为)。

5.2 对象与类的关系

类进行实例化可生成对象,因此,类的具体表现或者实例就是对象,而对象的抽象或者总归纳就是类

6. 面向对象的三大特性

说到面向对象,就不得不说其三大特性:封装、继承和多态。

下面简单说说本身的理解吧,就再也不贴相关示例了,网上有不少优秀的例子。

6.1 封装

封装是面向对象最基础的特性。在前面介绍对象时,提到“一个对象一般由一组属性和对这组属性进行操做的若干服务(方法)构成”,这里的构成体现的就是封装性。

封装,是指对外隐藏对象内部的属性和实现细节,只提供相应的接口和方法进行交互。一方面,外部只需专一于对象所提供的能力,而不用关心内部实现细节;另外一方面,避免了外部随意修改或访问内部属性和方法,从而提高了程序的健壮性;同时,封装能提高代码的复用率。

6.2 继承

继承指一个对象从另外一个对象中得到属性和方法的过程,继承者称为子类,被继承者称为父类。继承使得子类对象拥有父类对象的所有属性与方法(非私有)。

Key point:

  • 子类也能够被其余类继承成为父类;
  • 父类能够拥有多个子类,但一个子类只能有一个父类。这一点与现实中父亲与孩子的关系是一致的;
  • Java 中任何类都是 java.lang.Object 的直接或间接子类;
  • 子类不能继承父类中访问权限为 private 的成员变量和方法;
  • 子类能够重写(override)父类的方法;
  • 子类能够经过 super 关键字访问父类的成员变量、方法和构造器;
  • final 声明的类或方法,不能被继承或重写;

6.3 多态

多态是在继承的基础上实现的,多态实现的三个必要条件:

  1. 继承
  2. 方法重写(override)
  3. 父类引用指向子类对象,例如:Human human = new Man(),这里 Man extends Human。

当使用多态方式调用方法时,会依据如下规则:

  1. 首先检查父类中是否有该方法,若是没有,则编译错误;
  2. 若子类重写了该方法,调用子类的重写方法;
  3. 若子类没有重写该方法,则调用父类的方法;

多态的好处:可使程序有良好的扩展,并能够对全部类的对象进行通用处理。

7. 总结

以上是本文的所有内容,但愿能对你有所启发。内容说不上全面、无误,还望读者朋友补充、指正。

最后,感谢阅读。

相关文章
相关标签/搜索