夯实Java:从面向对象说起

作者:伯特
出处:github.com/ruicbAndroid/LoulanPlan
本文出自伯特的《楼兰计划》,转载务必注明作者及出处。

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

1. 什么是面向对象

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

2. 什么是对象

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

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

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

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

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

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

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

要知道,二者并不是非此即彼,而是相辅相成的。

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

可以看出,面向对象最终还是离不开面向过程。

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

面向过程实现:

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. 总结

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

最后,感谢阅读。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 今天有朋友受我影响开始想要学习坐享,希望他也能像我一样找到正确的打开方式,提升自己的元认知能力,也让我感受一下成为...
    李章文阅读 114评论 0 0
  • (略含剧透) ·本来是想写温情感人、浪漫可爱的青春文学,相对来说我比较擅长这一类,后来才变成包含了青春、穿越、搞笑...
    Myron马阅读 375评论 3 4
  • 唯有相聚 万学洪 ——黄陂三中八七级老四班30年同学会 为什么我们梦里 常响起熟悉的旋律 因为在我们心底 有太多青...
    蛀心虫阅读 640评论 0 0
  • Nancy 的英语课总能让人眼前一亮~ 先说一点发现---给我们上课的几位老师,会就我们之前学过的内容进行复习和提...
    April0Brighton阅读 1,004评论 0 6
  • 有的人把失恋时的日子熬成一锅汤,自己当作乌鸡,情绪变成作料,就着小火咕嘟咕嘟炖着,一锅接一锅。 有的人把失恋时的情...
    卓思超壳儿阅读 585评论 0 1