4类和对象

  在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下:

从本章开始,我们一点一点来剖析类的世界,带领大家一起进入类的海洋。

4.1初识类和对象

4.1.1什么是类

其实在现实世界当中,类并不陌生。比如我们把自己称为人,把花花草草称为植物,把用的手机电脑称为电器,把坐的汽车地铁称为交通工具等等。这些称呼其实就是在把事物进行分类。有的时候,还会根据特定的需要,把这些事物往下进行细化或往上进行抽象,例如把手机称为手持设备(手持设备属于电器的一类),把人和植物统称为生物等等。图示如下:

我们之所以这么分类,是因为同一类事物具有一些相同的属性和行为。比如手机有型号、颜色、屏幕尺寸等属性,可以打电话、播放视频、玩游戏等功能。

  程序就是用来解决现实世界的问题的,程序语言经历了从低级语言到高级语言的进化,为了更加贴近人的思维方式,因此高级语言也把问题中涉及到的具有相同属性和行为的事物抽象成类。Java作为一种高级语言,当然也不例外。

  在Java中,我们所有的代码都是位于某一个类中的。标准的类库中提供了上千个类,可以用于各种各样的功能。在程序中,我们把事物抽象成类的过程,可以称之为封装。说白了,封装就是把属性和行为包装到一个类中,对使用者隐藏属性存储的细节和行为实现的细节,只提供使用的API文档。例如我们买一部手机,会提供给我们一份说明书,这个说明书就是API文档,我们照着说明书就会使用这部手机了。

  类也可以向下细化成更小的类,这个过程称为继承。其实,在Java中,所有的类都直接或间接继承自一个超级类:Object。关于继承,我们后面还会详细探讨。

  通过上面的分析,我们知道,类具有3个主要要素:名字、属性、行为。在Java中,我们把行为称之为方法。例如手机类:

4.1.2什么是对象

  你们中估计好多都没有搞对象吧?嘿嘿。我现在带你到Java中来搞。前面提到了手机类,但是这个分类在现实世界中怎么体现呢?例如笔者有一部荣耀V20,蓝色的外壳,6.1寸的屏幕。我媳妇有一部红色iphone11,也是6.1寸屏幕。这2部手机是实实在在存在的、看得见、摸得着的具体事物,它们就是手机类的具体体现,我们称之为手机类的对象。

  类可以理解为构造对象的模板,是一种抽象定义。对象是类具体化后实实在在存在的事物。在程序中,通过类,可以创建出具体的对象,这个过程叫做构建类的实例,对象既然是类的实例,因此它会把类的3个主要要素具体化:

  • 对象的状态:类的属性在对象上的具体表现
  • 对象的行为:类的方法在对象上的具体表现
  • 对象的标识:区分同一个类的不同的实例

我们用图描述一下:

从上图我们可以看出:

  • 每个对象实例的属性值各不相同,称之为对象的状态,因为类具有封装性,因此状态一般不会自发的改变,大部分都会通过方法调用后,才会发生改变。
  • 同一个类的不同对象实例,他们具有相同的行为,这些行为是类的方法所定义的。但是对象的状态会影响行为的结果,例如手机的硬件可以看成是手机的属性,因为iphone11和v20的硬件具体参数不同,因此虽然有相同的行为,但是行为的结果可能不一样。例如v20只能低画质吃鸡,而iphone11可以高画质吃鸡。
  • 不同的对象还需要加以区分,因此都会有一个唯一的身份识别码(标识),例如我们的手机都会有一串看不懂的型号标识,当发生保修的时候一般就会用到。在程序中,这个标识会随着对象的实例化而自动分配。

  通过上面的讨论,我们搞清楚了什么是类,什么是对象,类和对象的关系。那么我们如何使用一个类呢?我们知道,我们想要看电视,首先得去买一台电视机(除非你能自己造一台)。同理,一般我们想要解决问题,先从JDK提供的类库里找,看看有没有满足我们需求的类,如果没有,我们再自己创建(当然,现在Java已经非常火爆,开源的类库琳琅满目,只有你想不到的,没有你找不到的)。接下来的小节我们会通过一个非常常用的类来学习如何使用一个类。

《Java从入门到失业》第四章:类和对象(4.1):初识类和对象的更多相关文章

  1. 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介

    1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...

  2. 《Java从入门到失业》第二章:Java环境(四):IDE集成环境

    2.4IDE集成环境 在掌握了编写.编译和运行Java程序的基本步骤以后,你肯定就在想,这太麻烦了,有没有更好的工具?当然有了,那就是IDE.IDE就是专业的集成开发环境(Integrated Dev ...

  3. 《Java从入门到失业》第一章:计算机基础知识(一):二进制和十六进制

    0 前言 最近7年来的高强度工作和不规律的饮食作息,压得我有些喘不过气,身体也陆续报警.2018年下半年的一场病,让我意识到了这个问题的严重性,于是开始强制自己有规律饮食和作息,并辅以健身锻炼,不到2 ...

  4. 《Java从入门到失业》第二章:Java环境(一):Java SE安装

    从这一章开始,终于我们可以开始正式进入Java世界了.前面我们提到过,Java分三个版本,我们这里只讨论Java SE. 2.1Java SE安装 所谓工欲善其事,必先利其器.第一步,我们当然是要下载 ...

  5. 《Java从入门到失业》第二章:Java环境(三):Java命令行工具

    2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...

  6. 《Java从入门到失业》第二章:Java环境(二):JDK、JRE、JVM

    2.2JDK.JRE.JVM 在JDK的安装目录中,我们发现有一个目录jre(其实如果是下一步下一步安装的,在和JDK安装目录同级目录下,还会有一个jre目录).初学Java的同学,有时候搞不清楚这3 ...

  7. 《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理

    1.2计算机组成及基本原理 1.2.1硬件组成 这里说的计算机主要指微型计算机,俗称电脑.一般我们见到的有台式机.笔记本等,另外智能手机.平板也算.有了一台计算机,我们就能做很多事情了,比如我在写这篇 ...

  8. 《Java从入门到失业》第四章:类和对象(4.5):包

    4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...

  9. #Python编程从入门到实践#第四章笔记

    #Python编程从入门到实践#第四章笔记   操作列表 ​​​1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...

  10. ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...

随机推荐

  1. Css 设置超过再两行显示省略号

    大部分场景都是超过一行就显示... <template> <div class="other-product-item item-name" :title=&qu ...

  2. GitHub 热点速览 Vol.32:VScode 韭菜基金插件,极大提高“工作”效率

    作者:HelloGitHub-小鱼干 摘要:有什么比干着本职工作--编码,而又兼顾"外快"--炒股更有开心的事情呢?leek-fund 就是这么一个极大提升你工作幸福度和效率的插件 ...

  3. Deep learning-based personality recognition from text posts of online social networks 阅读笔记

    文章目录 一.摘要 二.模型过程 1.文本预处理 1.1 文本切分 1.2 文本统一 2. 基于统计的特征提取 2.1 提取特殊的语言统计特征 2.2 提取基于字典的语言特征 3. 基于深度学习的文本 ...

  4. Android Studio 代码回退

    1.VCS–Local History–Show History 或者 这个按钮 2.代码操作记录出现了,选定我们操作的一个历史阶段 3.点击左上角的按钮(revert),代码回退成功

  5. 走正确的路 - IT业没有护城河 - 机器翻译新锐Deepl

    最近发生了一件很令我震惊的事情:新的一个机器翻译网站出现了 - www.deepl.com (DeepL 或许会成为你今年首选的翻译工具) 机器翻译早就是红海市场了.我就不从1954年IBM发布俄翻英 ...

  6. Spring注解驱动开发03(按照条件注册bean)

    按照条件注册bean 使用@Conditional注解来控制bean的注册 使用步骤 先实现Condition接口,条件写在matches方法里 注意事项:Condition接口是org.spring ...

  7. JavaScript学习系列博客_22_JavaScript this(上下文对象)

    this(上下文对象) - 我们每次调用函数时,解析器都会将一个上下文对象作为隐含的参数传递进函数. 使用this来引用上下文对象,根据函数的调用形式不同,this代表的对象也不同.不同的情况: 1. ...

  8. Dubbo系列之 (五)服务订阅(2)

    辅助链接 Dubbo系列之 (一)SPI扩展 Dubbo系列之 (二)Registry注册中心-注册(1) Dubbo系列之 (三)Registry注册中心-注册(2) Dubbo系列之 (四)服务订 ...

  9. golang IPv6 转 十进制

    IPv4 互换: package main import ( "fmt" "math/big" "net" ) func InetNtoA( ...

  10. Java——注解

    注解的产生背景以前,xml以低耦合的方式得到了广大开发者的青睐,xml在当时基本上能完成框架中的所有配置.但是随着项目越来越庞大,xml的配置也越来越复杂,维护性也随之降低,维护成本增高.于是就产生了 ...