趣味故事掌握類和對象,關于鞋廠的大學問!

      網友投稿 673 2025-03-31

      朋友們,小白的奶奶上次學會面向對象三個特征之后,突然對編程很感興趣。

      回去讓他的小白給她買了一些編程書籍,可還是記不住類和對象。

      這怎么行呢?類和對象是整個面向對象編程的基石啊!必須搞懂!

      所以,小白奶奶又來敲門了。。。

      好吧,看老奶奶這么好學,我這次直接就講了。

      本文圍繞王總轉型制造業造鞋廠的故事,來展示講述。

      什么是類(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; } @Override public 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); } @Override public 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); } @Override public 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); } @Override public 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); //打印每雙鞋的hashcode System.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文件(類的字節碼文件)。

      總結

      本文講解了類和對象

      類普遍代指含義

      對象的特殊性,對象是一個唯一的個體

      類和對象的區別

      上面的說的大型鞋廠就像一個JVM(Java虛擬機)一樣,時刻不停的從模具(.class文件)中制造鞋子(創建對象object),然后賣出鞋子。

      語言(Java)只是用來表達的,核心原理其他語言都適用,刷幾百萬都買不來這么值的!

      先說到這里,以后都會再談,關注長期閱讀 =>雷學委趣味編程故事匯編

      彩蛋:實際應用中,有些場景我們會認為屬性都相等的對象相等,雷學委已經在XLeixw類重寫了相關方法,讀者可以自行下載文末代碼,試著創建兩個款XLeixw同個顏色尺寸的鞋子判斷是否相同。

      持續學習持續開發,我是雷學委!

      編程很有趣,關鍵是把技術搞透徹講明白。

      歡迎關注,還有盡情!

      代碼鏈接:

      CSDN Repo

      Gitee

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:嘉御資本衛哲:目前的形勢下是否還要創新,如何做創新
      下一篇:Excel文件格式丟失的處理方法
      相關文章
      中文文字幕文字幕亚洲色| 亚洲五月综合缴情在线观看| 久久精品国产亚洲av四虎| 久久久久亚洲av成人无码电影| 亚洲色大18成人网站WWW在线播放| 亚洲乱码一二三四五六区| 亚洲精品视频专区| 亚洲天天做日日做天天看| 亚洲精品无码专区久久久| 国产亚洲一区二区三区在线不卡 | 亚洲日韩在线视频| 亚洲日本在线看片| 久久久亚洲AV波多野结衣| 亚洲综合激情视频| 亚洲国产av一区二区三区丶| 亚洲国产成人久久| 亚洲香蕉在线观看| 亚洲国产精品无码观看久久| 亚洲av纯肉无码精品动漫| 无码国产亚洲日韩国精品视频一区二区三区| 鲁死你资源站亚洲av| 亚洲v国产v天堂a无码久久| 亚洲精品456播放| 亚洲一区AV无码少妇电影☆| 亚洲国产精品无码久久一区二区 | 亚洲精品亚洲人成在线播放| 久久久久亚洲国产| 亚洲AV无码成人精品区日韩| avtt亚洲天堂| 国产午夜亚洲精品国产成人小说| 亚洲精品国产精品乱码在线观看| 久久精品亚洲中文字幕无码网站| 精品无码一区二区三区亚洲桃色| 亚洲免费一级视频| 亚洲精品欧美综合四区| 狠狠色婷婷狠狠狠亚洲综合| 国产亚洲成av人片在线观看| 久久精品国产亚洲AV麻豆网站| 亚洲伊人久久大香线蕉| 亚洲爆乳精品无码一区二区| 亚洲女人被黑人巨大进入|