朋友们,小白的奶奶上次学会面向对象三个特征之后,突然对编程很感兴趣。

回去让他的小白给她买了一些编程书籍,可还是记不住类和对象。

这怎么行呢?类和对象是整个面向对象编程的基石啊!必须搞懂!

所以,小白奶奶又来敲门了。。。

好吧,看老奶奶这么好学,我这次直接就讲了。

本文围绕王总转型制造业造鞋厂的故事,来展示讲述。

什么是类(class)和对象(object)?

我们这次主人公还是王总。不过由于房市业务遇冷觉得,他转型改行开了一个大型鞋厂,潮鞋品牌,准备上下游一条龙整齐全了。

虽然新冠之前,王总每天能生产100万双鞋子,卖的也很火。不过新冠后,订单量少了很多。

于是他就请来了专业的商业咨询机构。走进厂里一看,你这里的几十款鞋子都是老旧款式得设计多一些新款啦。

小白奶奶听了又是着急又一头雾水,见我没想要停下来解释概念。

直接打断讲解,“雷学委,请问扯半天这关类什么事啊?”

我扶了扶眼镜,话都讲不到三句呢!这不正讲到了重点了。(没错,雷学委戴眼镜的,其他都是假冒!)

‘类’就是商业顾问说的新款式。多个新款式就是多个不同的‘类’。像造鞋厂得根据不同类型制作模具,然后从模具来批量生产鞋子。
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

小白奶奶说哦,那新鞋子算不算一个新的类啊?

雷学委摇摇头,这不是类了,新鞋子从款式的模型中做好了,已经不是类了,而是对象!

小白奶奶又说了,但是尺寸编号不一样啊,你刚刚不是说不同款型就说类吗?这不就矛盾了。

我摇摇头,那还是同一款式的鞋。

你看到鞋子是对象,对象他有自己的鞋码,颜色等,但是有一个唯一的编号。
对象是具有类类型的变量,类的一个具体实例。

售货员也是按这个编号来管理的,每出售一双鞋子就把这个编号标记为已出售!

奶奶说,好像明白了一点。是不是鞋子模具或者设计图就等同于类呢,具体买到的鞋子就是对象?

奶奶自己在那嘀咕了一会,嗯,没错。

那你能够说告诉我它们的区别不? 我现在感觉类和对象一个说的是鞋款概念和一个说的是一双实物鞋子。(学委觉得老奶奶领悟能力不比年轻人差啊)

类和对象的区别

类具有普遍性代指一个类似的群体;对象具有特殊性,是唯一个体

类是什么对普遍事物的一般化。比如一些产品的模具就是类。它是对一整类事物的概括描述
对象是类实例化的,一个类的某个实例,比如根据某个型号模具而制作出来的鞋子,它只能是一个具体的个体。

下面展示代码了:
雷学委创建了一个 Shoe类,这个类下面分了几个大牌子叫做XAnta,X361Du,以及XLeixw (呵呵,雷学委自创品牌)等。
这几个大牌子下面还有各个款式细分。

我们看到的XAnta鞋子这个概念就是一个大类,再如XAnta春季款鞋子就是这个大类下的一个分支类。

消费者最后拿到手的,会是一对XAnta春季款39码,银灰色潮流时尚款,如上图序列号(SN1639705018),就是一个对象。

奶奶此刻很高兴:”原来就这么简单,还挺具体的!“

好,我们看看下面看看类的代码实现:

package org.levintech.javademo.leixuewei.classobject;/*** @author levin* Created on 2021/6/20* [雷学委] CSDN/Juejin Code Demo*/
public class Shoe {private int size;private String color;public Shoe(int size, String color) {this.size = size;this.color = color;}public int getSize() {return size;}public String getColor() {return color;}@Overridepublic String toString() {return "Shoe{" +"size='" + size + '\'' +", color='" + color + '\'' +", serialNo='" + hashCode() + '\'' +'}';}
}/*** XAnta*/
class XAntaShoe extends Shoe {private String brand = "XAnta";public XAntaShoe(int size, String color) {super(size, color);}@Overridepublic String toString() {return "XAntaShoe{" +"size='" + getSize() + '\'' +", color='" + getColor() + '\'' +", serialNo='" + hashCode() + '\'' +", brand='" + brand + '\'' +'}';}
}/*** X361Du*/
class X361DuShoe extends Shoe {private String brand = "X361Du";public X361DuShoe(int size, String color) {super(size, color);}@Overridepublic String toString() {return "X361DuShoe{" +"size='" + getSize() + '\'' +", color='" + getColor() + '\'' +", serialNo='" + hashCode() + '\'' +", brand='" + brand + '\'' +'}';}
}/*** XLeixw*/
class XLeixw extends Shoe {private String brand = "XLeixw";public XLeixw(int size, String color) {super(size, color);}@Overridepublic String toString() {return "XLeixw{" +"size='" + getSize() + '\'' +", color='" + getColor() + '\'' +", serialNo='" + hashCode() + '\'' +", brand='" + brand + '\'' +'}';}
}

上面定义了4个类,一个大的鞋(Shoe)类,有尺寸(size),颜色(color)这两个特征)。然后XAntaShoe这个类,具有自己的品牌(brand),其他两个类也是如此。
然后每一个类都覆盖了toString方法,把鞋子的信息打印出来了,像XAntaShoe/X361Du/XLeixw 等鞋类还打印了品牌信息。

运行示例程序的代码如下。:

public class LeiXueWeiRunner {public static void main(String[] args) {System.out.println("【雷学委代码Demo】");Shoe anta01 = new XAntaShoe(40, "black");println(anta01);Shoe x36101 = new X361DuShoe(40, "blue");println(x36101);System.out.println(anta01 == x36101);//打印每双鞋的hashcodeSystem.out.println(anta01.hashCode());System.out.println(x36101.hashCode());//创建两双同码同色的鞋子,我们可以留意到两双尺码颜色同款鞋,序列号不一样!println(new XAntaShoe(40, "black"));println(new XAntaShoe(40, "black"));//创建anta04 跟 anta04 颜色款式尺寸一样,看看是否相同对象Shoe anta04 = new XAntaShoe(40, "black");System.out.println("anta01 与 anta04是否相同?" + (anta01 == anta04));//这个判断是比较引用的System.out.println("anta01 与 anta04是否相同?" + (anta01.equals(anta04)));//这个才是真正判断对象是否相同的}public static void println(Shoe shoe) {System.out.println("鞋:" + shoe);}
}

运行效果图如下:

这里打印的就是特定的对象。我们看到,每个鞋都有一个序列编号(serialNo),而且是唯一的。

类是没有状态的,对象是有状态的,有具体的值!

只要创建新对象,不管是同款式的同个鞋码颜色,这个序列号都会变化。

而且,我们判断anta01跟anta04是否相同的对象(同一双鞋)。答案是:也就是不管一个类实例属性值都相同了,但系统认为它们仍不是同一个对象!

类是持续存在的,而对象只存在于内存之中,随着程序执行结束而销毁了!

上面的实例代码运行结束后,我们是无法再找回这个对象的。

但是类仍然存在当前系统的磁盘上, 如上图.class文件(类的字节码文件)。

总结

本文讲解了类和对象

  1. 类普遍代指含义
  2. 对象的特殊性,对象是一个唯一的个体
  3. 类和对象的区别

上面的说的大型鞋厂就像一个JVM(Java虚拟机)一样,时刻不停的从模具(.class文件)中制造鞋子(创建对象object),然后卖出鞋子。

语言(Java)只是用来表达的,核心原理其他语言都适用,刷几百万都买不来这么值的!

先说到这里,以后都会再谈,关注长期阅读 =>雷学委趣味编程故事汇编

彩蛋:实际应用中,有些场景我们会认为属性都相等的对象相等,雷学委已经在XLeixw类重写了相关方法,读者可以自行下载文末代码,试着创建两个款XLeixw同个颜色尺寸的鞋子判断是否相同。

持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注,还有尽情点赞收藏!

代码链接:
CSDN Repo
Gitee

趣味故事掌握类和对象,关于鞋厂的大学问!相关推荐

  1. python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...

    一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...

  2. python面向对象图片_趣味解读Python面向对象编程 (类和对象)

    一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...

  3. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  4. python什么是类和对象_python的类和对象(1)

    类和对象 现在这年头,怎么哪里都有对象?街上看了一路手拉手,回来学习还要看到"对象". 是不是学会了对象,就有对象了? 1.定义: 百度解释: 对象是对客观事物的抽象,类是对对象的 ...

  5. python学习之【类和对象】

    前言 五一快乐! 上一篇文章python学习--[第八弹]中,给大家介绍了python中的函数,这篇文章接着学习python中的类和对象. 我们知道,python中一切皆对象.在这篇文章开始之前,我们 ...

  6. 面向对象(一):类和对象

    一.面向对象的基本介绍 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑. 今天我们来学习一种新的编程方式: ...

  7. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  8. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  9. C02-程序设计基础提高班(C++)第9周上机任务-类和对象

    第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...

最新文章

  1. 设计模式----模板方法模式UML和实现代码
  2. AB_PLC_入门教程
  3. POJ1942-Paths On a Grid-组合数学
  4. 5.7 echo:显示一行文本
  5. 谷歌:. apk 成为历史!
  6. HTML5 学习笔记(三)——本地存储(LocalStorage、SessionStorage、Web SQL Database)
  7. maven安装后环境变量配置
  8. Linux常用命令及笔记
  9. STM32液晶显示HT1621驱动原理及程序代码
  10. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题
  11. java实例成员与类成员区别_Java之实例成员与类成员
  12. FineBI01:FineBI介绍
  13. Python code on Sliced Inverse Regression ( SIR ) and Sliced Average Variance Estimates ( SAVE )
  14. Bootstrap V5 图标字体的引入以及使用方法
  15. 简单的PHP登陆页面和登陆成功页面代码
  16. SAP软件ERP系统简介
  17. 支付宝官方支付接口申请配置教程(如何开通支付宝支付接口)
  18. 【知识点】UDS刷写的一般流程介绍
  19. 如何把自己的电脑配置成外网可访问的服务器?
  20. json序列化 java对象_Json 数据反序列化为Java对象

热门文章

  1. 多线程下调用ShowDialog时异常原因及解决办法
  2. Bootstrap 信息提示框
  3. Android开发艺术探索1
  4. 单相整流及三相整流电路分析-包括整流桥及电容选择计算
  5. mysql ora01031_as sysdba 出现ORA-01031: insufficient privileges 解决办法
  6. Apple watch 控制中心没有了?
  7. STM32定时器中断显示时间
  8. 什么是NFS?NFS挂载
  9. ncurses库的安装
  10. 高斯计如何用于生物医学研究