《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
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):初识类和对象的更多相关文章
- 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介
1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...
- 《Java从入门到失业》第二章:Java环境(四):IDE集成环境
2.4IDE集成环境 在掌握了编写.编译和运行Java程序的基本步骤以后,你肯定就在想,这太麻烦了,有没有更好的工具?当然有了,那就是IDE.IDE就是专业的集成开发环境(Integrated Dev ...
- 《Java从入门到失业》第一章:计算机基础知识(一):二进制和十六进制
0 前言 最近7年来的高强度工作和不规律的饮食作息,压得我有些喘不过气,身体也陆续报警.2018年下半年的一场病,让我意识到了这个问题的严重性,于是开始强制自己有规律饮食和作息,并辅以健身锻炼,不到2 ...
- 《Java从入门到失业》第二章:Java环境(一):Java SE安装
从这一章开始,终于我们可以开始正式进入Java世界了.前面我们提到过,Java分三个版本,我们这里只讨论Java SE. 2.1Java SE安装 所谓工欲善其事,必先利其器.第一步,我们当然是要下载 ...
- 《Java从入门到失业》第二章:Java环境(三):Java命令行工具
2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...
- 《Java从入门到失业》第二章:Java环境(二):JDK、JRE、JVM
2.2JDK.JRE.JVM 在JDK的安装目录中,我们发现有一个目录jre(其实如果是下一步下一步安装的,在和JDK安装目录同级目录下,还会有一个jre目录).初学Java的同学,有时候搞不清楚这3 ...
- 《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理
1.2计算机组成及基本原理 1.2.1硬件组成 这里说的计算机主要指微型计算机,俗称电脑.一般我们见到的有台式机.笔记本等,另外智能手机.平板也算.有了一台计算机,我们就能做很多事情了,比如我在写这篇 ...
- 《Java从入门到失业》第四章:类和对象(4.5):包
4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...
随机推荐
- C#算法设计排序篇之09-基数排序(附带动画演示程序)
基数排序(Radix Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/691 访问. 基数排序属于" ...
- menset与fill
menset函数一般只对int型数组进行0.-1的赋值.原因:menset对数组是按字节赋值,对每个字节的赋值是相同的,故int的4个字节全部被赋相同的值,而0正好二进制编码全为0,-1的二进制编码全 ...
- Python 读取word中表格数据、读取word修改并保存、替换word中词汇、读取word中每段内容,读取一段话中相同样式内容,理解Document中run
from docx import Document path = r'D:\pywork\12' # word信息表所在文件夹 w = Document(path + '/' + 'word信息表.d ...
- Go 编译器内部知识:向 Go 添加新语句-第 2 部分
这是探讨 Go 编译器两篇文章的最后一篇.在第 1 部分中,我们通过构建自定义的编译器,向 Go 语言添加了一条新语句.为此,我们按照此图介绍了编译器的前五个阶段: 在"rewrite AS ...
- AS 新电脑clone项目报错:Clone failed: Authentication failed for 'https://gitee.com/XXX/Demo.git/'
在新的电脑上安装Android Studio,并且使用git clone 项目,报以下错误: Clone failed: Authentication failed for 'https://gite ...
- 秒杀 2Sum 3Sum 4Sum 算法题
2 Sum 这题是 Leetcode 的第一题,相信大部分小伙伴都听过的吧. 作为一道标着 Easy 难度的题,它真的这么简单吗? 我在之前的刷题视频里说过,大家刷题一定要吃透一类题,为什么有的人题目 ...
- 源码解析JDK1.8-HashMap链表成环的问题解决方案
前言 上篇文章详解介绍了HashMap在JDK1.7版本中链表成环的原因,今天介绍下JDK1.8针对HashMap线程安全问题的解决方案. jdk1.8 扩容源码解析 public class Has ...
- Spring注解驱动开发01(组件扫描使用详解)
使用Spring注解代替XML的方式 以前都是通过xml配bean的方式来完成bean对象放入ioc容器,即使通过@Aotuwire自动装配bean,还是要创建一个xml文件,进行包扫描,显得过于繁琐 ...
- python基础 Day3
python Day3 1.作业回顾 设定一个理想的数字比如88,让用户输入数字,如果比88大,则显示猜测的结果大:如果比66小,则显示猜测的结果小了,给用户三次猜测机会,如果显示猜测正确退出循环,如 ...
- 为什么 max() 应该写成 b < a ? a : b 呢?
在 < C++ Templates 2nd Edition >Chapter 1 中,作者将 max() 模板定义如下: template <typename T> T max ...