




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
類的設計與實現(xiàn)Java應用開發(fā)與實踐
酒店管理系統(tǒng)的設計學習目標理解類和對象的含義及相互的關系掌握對象的創(chuàng)建,理解對象的生命周期掌握包的創(chuàng)建、理解各種修飾符的用法和意義理解面向?qū)ο蟮娜筇卣鳎悍庋b、繼承和多態(tài)理解抽象類和接口意義及兩者的區(qū)別和聯(lián)系4.1類和對象4.2類的定義4.3對象的創(chuàng)建4.4封裝、繼承和多態(tài)4.5抽象類和接口4.6實訓4類的設計與實現(xiàn)基礎練習目錄4.1類和對象萬物皆對象,對象的實質(zhì)是屬性和行為。對象就是真實世界中的實體,對象與實體是一一對應的,也就是說現(xiàn)實世界中每一個實體都是一個對象,它是一種具體的概念。對比現(xiàn)實對象和軟件對象,它們之間十分相似。把現(xiàn)實世界中的對象抽象地體現(xiàn)在編程世界中,一個對象代表了某個具體的操作。一個個對象最終組成了完整的程序設計,這些對象可以是獨立存在的,也可以是從別的對象繼承過來的。對象之間通過相互作用傳遞信息,實現(xiàn)程序開發(fā)。4.1.1類和對象的概念類是描述了一組有相同特性(屬性)和相同行為(方法)的一組對象的集合。對象或?qū)嶓w所擁有的特征在類中表示時稱為類的屬性。對象執(zhí)行的操作稱為類的方法。因此,類是描述實體的“模板”和“原型”,它定義了屬于這個類的對象所應該具有的狀態(tài)和行為,比如一個人在學習。一名正在學習的人是類,它定義的信息有姓名(狀態(tài))和學習(行為)。4.1.1類和對象的概念4.1類和對象具有相同特性(屬性)和行為(功能)的對象的抽象就是類,因此對象的抽象是類,類的具體化就是對象,也可以說:類的實例是對象。類本是一個模板,描述類的行為和狀態(tài),軟件對象也有狀態(tài)和行為。軟件對象的狀態(tài)就是屬性,行為通過方法去體現(xiàn)。使用該類定義的不同姓名的人在學習是對象。類是實體對象的概念模型,因此通常是籠統(tǒng)的、不具體的。類是構造面向?qū)ο蟪绦虻幕締挝?,是抽取了同類對象的共同屬性和方法所形成的對象或?qū)嶓w的“模板”。而對象是現(xiàn)實世界中實體的描述,對象要創(chuàng)建才存在,有了對象才能對對象進行操作。類是對象的模板,對象是類的實例。4.1.2類和對象的關系類對象動物一只1歲的小狗一只2歲的小貓汽車一輛藍色的寶馬轎車一輛白色的福特越野車車職員一個26歲的女售房員一個31歲的男技術人員類和對象的舉例表方法操作對象內(nèi)部狀態(tài)的改變,對象的相互調(diào)用也是通過方法來完成。4.2類的定義根據(jù)定義變量位置的不同,可以將變量分成兩大類:成員變量(存在于堆內(nèi)存中,和類一起創(chuàng)建)和局部變量(存在于棧內(nèi)存中,當方法執(zhí)行完成,讓出內(nèi)存,讓其他方法來使用內(nèi)存)。成員變量是定義在類中,方法體之外的變量。這種變量在創(chuàng)建對象的時候?qū)嵗3蓡T變量可以被類中方法、構造方法和特定類的語句塊訪問。4.2.1成員變量publicclassPerson{ publicStringpId;//成員變量
publicStringname;//成員變量
publicintage;//成員變量
publicstaticvoidmain(String[]args){ Personp1=newPerson();}}4.2.1成員變量p1.pId=;//成員變量賦值--=“關羽";p1.age=39;4.2.1成員變量p1.pId=;//成員變量賦值--=“關羽";p1.age=39;p2.pId=;=“張海";p2.age=27;4.2.1成員變量4.2類的定義在Java中,方法只能作為類的成員,也稱為成員方法,它是數(shù)據(jù)的操作的定義。方法操作類所定義的數(shù)據(jù),以及提供對數(shù)據(jù)的訪問的代碼。大多數(shù)情況下,程序的其他部分都是通過類的方法和其他類的實例進行交互的。成員方法根據(jù)有無返回值和有無形式參數(shù)劃分為四種:無參無返回(void類型)的方法、無參有明確返回值的方法、帶參無返回(void類型)的方法、帶參有明確返回值的方法。4.2.2成員方法publicvoideat(){
System.out.println("無參無返回(void類型):我在吃飯");}//無參有明確返回值publicStringstudy(){ return"無參有明確返回值:我在學習java程序。";}4.2.2成員方法//帶參無返回(void類型)
publicvoidgetSalary(floatbasicSalary,floatmoneyAward){ floatsalary=basicSalary+moneyAward; System.out.println("帶參無返回(void類型):我的工資是"+salary); }//帶參有明確返回值publicfloatpurchase(Stringmall,floatmoney,Stringcommodit){ System.out.println("帶參有明確返回值:我在"+mall+"花費了"+money+"購買了"+commodit); returnmoney; }}4.2.2成員方法4.2類的定義在Java中,對象的成員在被使用前都必須先設置初值,Java提供了為類的成員變量賦初值的專門方法——構造方法。構造方法是一種特殊的方法,它是一個與類同名、沒有返回值、也不需要void的方法。對象的創(chuàng)建就是通過構造方法來完成,其功能主要是完成對象的初始化。當類實例化一個對象時會自動調(diào)用構造方法。new對象時,都是用構造方法進行實例化的。
Testtest=newTest("a");
Test("a");就是構造函數(shù),“a”為構造方法的實際參數(shù)。4.2.3構造方法如果程序中沒有定義任何構造方法,系統(tǒng)會為你定義一個不帶任何參數(shù)的構造方法,它被稱為默認構造方法,在這種情況下當產(chǎn)生類的對象時只能用默認構造方法。構造方法這種特殊的方法就是用來生成實例時由系統(tǒng)自動調(diào)用,程序員無法直接調(diào)用。子類繼承父類后默認繼承父類的構造方法,即:子類存在隱含方法:super(),如果子類重寫構造函數(shù)則子類也隱含調(diào)用super()。構造方法分為兩種:無參構造方法和有參構造方法。構造方法可以被重載。與一般的方法一樣,構造方法可以進行任何活動,但是經(jīng)常將它設計為進行各種初始化活動,比如初始化對象的屬性。4.2.3構造方法classPerson{ publicStringpId; publicStringname; publicintage; //無參構造方法
publicPerson(){ pId=; name="張三"; age=29; } //有參構造方法
publicPerson(StringpId,Stringname,intage){ super(); this.pId=pId; =name; this.age=age; }}4.2.3構造方法4.3對象的創(chuàng)建在Java中,一個對象在可以被使用之前必須要被正確地初始化。在實例化一個對象時,JVM首先會檢查相關類型是否已經(jīng)加載并初始化,如果沒有,則JVM立即進行加載并調(diào)用類的構造方法完成類的初始化。一個Java對象的創(chuàng)建過程往往包括類初始化和類實例化兩個階段。在Java代碼中,有很多方式可以引起對象的創(chuàng)建,最常見的一種就是使用new關鍵字來調(diào)用一個類的構造函數(shù)顯式地創(chuàng)建對象,這種方式在Java規(guī)范中被稱為:由執(zhí)行類實例創(chuàng)建表達式而引起的對象創(chuàng)建。除此之外,還可以使用反射機制(Class類的newInstance方法、使用Constructor類的newInstance方法)、使用Clone方法、使用反序列化等方式創(chuàng)建對象。4.3.1對象的創(chuàng)建及初始化4.3對象的創(chuàng)建Personp1=newPerson();Personp2=newPerson();Personp3=newPerson(,"陳東",25);根據(jù)Person構造出的每一個對象都是獨立存在的,保存有自己獨立的成員變量,相互不會影響。4.3.1對象的創(chuàng)建及初始化4.3對象的創(chuàng)建1.單獨調(diào)用:方法名稱(參數(shù));例:p1.eat();p1.getSalary(2000f,2500f);2.賦值調(diào)用:數(shù)據(jù)類型變量名稱=方法名稱(參數(shù));例:intresult=RectangleArea.getArea(13,4);//賦值調(diào)用4.3.2方法的調(diào)用4.3對象的創(chuàng)建this關鍵字是Java常用的關鍵字,可用于任何實例方法內(nèi)指向當前對象,也可指向?qū)ζ湔{(diào)用當前方法的對象,或者在需要當前類型對象引用時使用。另外,當一個類的屬性(成員變量)名與訪問該屬性的方法參數(shù)名相同時,則需要使用this關鍵字來訪問類中的屬性,以區(qū)分類的屬性和方法中的參數(shù)。4.3.3this關鍵字4.3對象的創(chuàng)建static關鍵字主要用于內(nèi)存管理。它主要使用在成員變量、成員方法、塊和內(nèi)部類中。static關鍵字屬于類,而不是類的實例。static使用范圍:1.修飾成員變量2.修飾成員方法3.靜態(tài)塊4.3.4static關鍵字1.修飾成員變量static最常用的功能就是修飾類的屬性和方法,讓他們成為類的成員屬性和方法,通常將用static修飾的成員稱為類成員或者靜態(tài)成員,相對而言,非靜態(tài)的對象的屬性和方法就叫實例成員或非靜態(tài)成員。4.3.4static關鍵字2.修飾成員方法static的另一個作用,就是修飾成員方法。相比于修飾成員屬性,修飾成員方法對于數(shù)據(jù)的存儲上面并沒有多大的變化,因為我們從上面可以看出,方法本來就是存放在類的定義當中的。static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式操作方法,避免了先要new出對象的繁瑣和資源消耗,我們會經(jīng)常在幫助類中看到它的使用。4.3.4static關鍵字3.靜態(tài)塊new一個Student對象時,static修飾的成員變量首先被初始化,隨后是普通成員,最后調(diào)用Person類的構造方法完成初始化。也就是說,在創(chuàng)建對象時,static修飾的成員會首先被初始化,而且我們還可以看到,如果有多個static修飾的成員,那么會按照它們的先后位置進行初始化。static{ System.out.println("我是Student的靜態(tài)代碼塊"); }4.3.4static關鍵字4.3對象的創(chuàng)建當Java源代碼編譯成class文件被JVM的類加載器裝載到內(nèi)存中后,也會經(jīng)歷這么一個從產(chǎn)生到死消亡的過程。通常來說,Java對象的生命周期包含了Java類的初始化、對象的創(chuàng)建與初始化、對象的銷毀等主要的階段。4.3.5對象的生命期1.Java類的初始化:之前提到過類的幾種成員,包含成員變量、方法、構造方法和靜態(tài)代碼塊,其中靜態(tài)代碼塊和靜態(tài)屬性(也就是static修飾的成員變量)在類第一次被真正使用時,JVM會對其按照出現(xiàn)的順序執(zhí)行初始化,而且該類初始化之前,它的直接父類也會先被初始化。4.3.5對象的生命期2.對象的創(chuàng)建與初始化,其方式有這么幾種:用new語句調(diào)用構造方法來創(chuàng)建對象。使用反射,調(diào)用java.lang.Class或java.lang.reflect.Constructor的newInstance()實例方法。調(diào)用對象的clone()方法。使用反序列化手段,調(diào)用java.io.ObjectInputStream對象的readObject()方法。4.3.5對象的生命期Java語言中對象的創(chuàng)建一般都是用new語句調(diào)用構造方法來實例化對象,例如:Personp1=newPerson();不管采取哪種方式創(chuàng)建對象,JVM創(chuàng)建一個對象都包含以下步驟: 給對象分配內(nèi)存。 將對象的實例變量自動初始化為其類型的默認值。 初始化對象,給實例變量賦予正確的初始值。4.3.5對象的生命期3.對象的銷毀當對象的生命周期結束時,分配給對象的內(nèi)存地址將會被回收。Java自帶垃圾回收機制,會自動識別內(nèi)存中不再會被使用的對象并將其銷毀,釋放內(nèi)存。finalize()的使用:在Java中每個被分配了內(nèi)存的對象最終是要被清理的,那么當系統(tǒng)不能準確的去判斷并釋放這些對象時,就需要程序員在這個對象的類里面創(chuàng)建一個finalize()的方法,方法告訴程序當滿足一個特定的條件時,就釋放對象。垃圾回收和finalize()方法不保證一定會發(fā)生,如Java虛擬機內(nèi)存損耗待盡時,它是不會執(zhí)行垃圾回收的。因此,Java提供了System.gc()方法強制啟動垃圾回收器。4.3.5對象的生命期4.4封裝、繼承和多態(tài)Java通過訪問修飾符來控制類的屬性和方法的訪問權限以及其他功能,一般放在語句的最前端。Java的修飾符有很多,分為訪問修飾符和非訪問修飾符。訪問修飾符也叫訪問控制符,是指能夠控制類、成員變量、方法的使用權限的關鍵字,訪問控制符是一個很重要的概念,可以使用它來保護對類、變量、方法以及構造方法的訪問。4.4.1類及類成員的訪問修飾符和其它修飾符4.4封裝、繼承和多態(tài)public公共的:公共的訪問權限,所有類都能訪問default缺省的:在當前包內(nèi)可訪問protected在當前類和它的子類中可訪問private在當前類中可訪問4.4.1類及類成員的訪問修飾符和其它修飾符4.4封裝、繼承和多態(tài)封裝是把過程和數(shù)據(jù)包圍起來避免外界直接訪問,只能通過已定義的接口實現(xiàn)對數(shù)據(jù)的訪問。因此現(xiàn)實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。封裝是一種信息隱藏技術,在Java中通過關鍵字private實現(xiàn)封裝。封裝實際上是將類的數(shù)據(jù)隱藏起來,使用方法來控制用戶對類的修改和訪問數(shù)據(jù)的程度。封裝的好處在于它可以隱藏私有數(shù)據(jù),讓使用者只能通過公共的訪問方法來訪問這些字段,我們只需要在這些方法中增加邏輯控制,限制對數(shù)據(jù)的不合理訪問、方便數(shù)據(jù)檢查,有利于保護對象信息的完整性。封裝還便于修改代碼,提高代碼的可維護性。4.4.2封裝4.4封裝、繼承和多態(tài)為了實現(xiàn)良好的封裝,需要從兩個方面考慮:把字段(成員變量)和實現(xiàn)細節(jié)隱藏起來,不允許外部直接訪問。把方法暴露出來,讓方法控制這些成員變量進行安全的訪問和操作。4.4.2封裝privateStringid;//學號privateStringname;//姓名publicStringgetId(){ returnid;}publicvoidsetId(Stringid){ this.id=id;}publicStringgetName(){ returnname;}publicvoidsetName(Stringname){ =name;}getId()、setId()等方法提供了對成員變量的公共訪問接口,實現(xiàn)了對成員變量的查詢和修改。4.4.2封裝4.4封裝、繼承和多態(tài)繼承是面向?qū)ο蟮闹匾拍睢@^承是除組合之外,提高代碼重復可用性的另一種重要方式。Java繼承是使用已存在的類的定義作為基礎去建立新類的技術,新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能。這種技術使得復用以前的代碼非常容易,能夠大大縮短開發(fā)周期,降低開發(fā)費用。繼承就是子類繼承父類的特征和行為,使得子類對象具有父類的特征,或子類從父類繼承方法,使得子類具有父類相同的行為。繼承的主要作用在于在已有基礎上(父類已經(jīng)定義好)繼續(xù)進行功能的擴充。它使用extends關鍵字。4.4.3繼承的實現(xiàn)4.4封裝、繼承和多態(tài)classFordextendsCar{ intspeed=100; publicvoidaccelerate(doubleseconds){ System.out.println("這輛"+wheel+"輪"+color+name+"只需要"+seconds+"秒就可以加速到"+speed+"公里"); }}classAudiextendsCar{。。。}4.4.3繼承的實現(xiàn)4.4封裝、繼承和多態(tài)多態(tài):允許不同類的對象對同一消息做出響應,即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。在Java中有兩種類型的多態(tài)性:編譯時多態(tài)性和運行時多態(tài)性。我們可以通過方法覆蓋和方法重載在Java中執(zhí)行多態(tài)性。覆蓋發(fā)生在父類和子類之間。當子類發(fā)現(xiàn)繼承自父類的成員變量或方法不滿足自己的要求時,就會對其重新定義。當子類的成員變量與父類的成員變量同名時(聲明的類型可以不同),子類的成員變量會隱藏父類的成員變量;當子類的方法與父類的方法具有相同的名字、參數(shù)列表、返回值類型時,子類的方法就會重寫(override)父類的方法(也叫做方法的覆蓋)。方法的覆蓋是動態(tài)多態(tài)性的表現(xiàn)。4.4.4多態(tài)——方法覆蓋與方法重載4.4封裝、繼承和多態(tài)Java發(fā)生方法覆蓋的條件如下:發(fā)生在父類和子類之間。必須具有相同的的方法名,相同的返回值類型,相同的參數(shù)列表。子類重寫的方法不能比被重寫的方法擁有更低的訪問權限。注意:私有的方法不能被覆蓋;構造方法無法覆蓋。因為構造方法無法繼承;靜態(tài)的方法不存在覆蓋。4.4.4多態(tài)——方法覆蓋與方法重載4.4封裝、繼承和多態(tài)方法的重載:在一個類中定義多個同名的方法,但要求每個方法具有不同的參數(shù)的類型或參數(shù)的個數(shù)。調(diào)用重載方法時,Java編譯器能通過檢查調(diào)用的方法的參數(shù)類型和個數(shù)選擇一個恰當?shù)姆椒?。方法重載通常用于創(chuàng)建完成一組任務相似但參數(shù)的類型或參數(shù)的個數(shù)或參數(shù)的順序不同的方法。Java的方法重載,就是在類中可以創(chuàng)建多個方法,它們可以有相同的名字,但必須具有不同的參數(shù),即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。調(diào)用方法時通過傳遞給它們的不同個數(shù)和類型的參數(shù),以及傳入?yún)?shù)的順序來決定具體使用哪個方法。4.4.4多態(tài)——方法覆蓋與方法重載4.4封裝、繼承和多態(tài)在大的軟件公司,一個項目往往有很多程序員參與開發(fā)。為了更好地定義和組織類,Java提供了包機制,它是用來區(qū)別類名的命名空間。通常把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。如同文件夾一樣,包也采用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調(diào)用兩個不同包中相同類名的類時,應該加上包名加以區(qū)別。因此,包可以避免名字沖突。包還有一個作用,包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。4.4.5包聲明一個包,用package關鍵字,包語句的語法格式為:packagepkg1[.pkg2[.pkg3…]];要求包的定義必須放在Java源文件的第一行,包的名稱一般為小寫,包名要有意義。packagecom.bean.entity;publicclassPerson{...}那么它的路徑應該是com/bean/entity/Person.java這樣保存的,也就是說Person這個類實際上位于com\bean\entity文件夾下。從邏輯上講,包是一組相關類的集合,從物理上講,同包即同目錄。4.4.5包為了使用不在同一個包中的類,需要在Java程序使用import關鍵字導入這個類。比如要使用Scanner類獲取用戶的輸入,Scanner類包含在Java核心類庫util包中,因此要使用Scanner類,就要導入util包,導入util包語句是:importjava.util.Scanner;另外也可以使用importjava.util.*;該條語句意思是導入Java核心類庫util包中的所有類,其中import是導入包關鍵字,java.util是指Java核心類庫中的util包,*是導入util包中的所有類。在Java代碼中,import語句應位于package語句之后,類定義之前,可以有多條import語句。4.4.5包4.4封裝、繼承和多態(tài)有一些類,在定義的時候就設置為:只能讓使用者直接使用該類里面的功能,而不能被繼承,這種類就是最終類。最終類用關鍵字final修飾。所以,被final修飾的類不能被繼承,不能作為其他類的父類,典型代表就是String類。publicfinalclassFinalClass{//...}4.4.6最終類4.5抽象類和接口用abstract關鍵字來修飾一個類時,這個類叫作抽象類。抽象類是它的所有子類的公共屬性的集合,是包含一個或多個抽象方法的類。抽象類可以看作是對類的進一步抽象。在面向?qū)ο箢I域,抽象類主要用來進行類型隱藏。不能new創(chuàng)建抽象類的實例。在抽象類中可以包含一般方法和抽象方法。抽象方法在方法頭后直接跟分號,而一般方法含有以大括號框住的方法體。所有的抽象方法必須存在于抽象類中。這些方法只有方法頭的聲明,而用一個分號來代替方法體的定義,即只定義成員方法的接口形式,而沒有具體操作。派生類對抽象成員方法的重定義才能真正實現(xiàn)與該派生類相關的操作。4.5.1抽象類和抽象方法4.5抽象類和接口由于抽象類不能直接實例化,需要創(chuàng)建一個指向自己的對象引用(其子類)來實例化。abstractclassAnimal{//抽象類
publicabstractvoidplay();//抽象方法}classCatextends
Animal{//這是子類,是一個貓類,重寫了父類方法
publicvoidplay(){ System.out.println("貓爬樹"); }}
Animala1=newCat();//多態(tài)4.5.2繼承抽象類4.5抽象類和接口Java接口(interface)是一系列方法的聲明,是一些方法特征的集合。一個接口只有方法的特征而沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。也就是說,接口是抽象方法的集合。接口通常以關鍵字interface來聲明。4.5.3接口的概念與定義4.5抽象類和接口接口主要使用在以下幾個方面:通過接口可以實現(xiàn)不相關類的相同行為。通過接口可以指明多個類需要實現(xiàn)的方法。通過接口可以了解對象的交互界面。4.5.3接口的概念與定義4.5抽象類和接口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 口頭承諾合同范本
- 新冠課題申報書
- 涼茶加盟合同范本
- 品牌共建協(xié)議合同范例
- 單位轉(zhuǎn)讓二手房合同范本
- 東芝熱水器安裝合同范本
- 臺球球員合同范本
- 員工股合同范本模板
- 品牌特賣合同范本
- 雙方出資合作合同范本
- 房屋租賃(出租)家私清單
- 計算機技術碩士專業(yè)學位授權點申報研究演示課件(PPT 39頁)
- 建筑裝飾材料與構造-ppt課件
- AWS D1.8 D1.8M-2021 結構焊接規(guī)范
- 剪紙藝術-認識剪紙
- 駕駛員違規(guī)違章學習記錄表
- 簡易瞬態(tài)工況法1
- 中國鐵路總公司環(huán)境保護管理辦法(鐵總計統(tǒng)〔2015〕260號)
- 技術分析介紹教程課件
- 汽車新能源汽車產(chǎn)業(yè)專利趨勢分析
- 故事小羊過橋PPT課件
評論
0/150
提交評論