《Java程序設(shè)計教程》05 類和對象_第1頁
《Java程序設(shè)計教程》05 類和對象_第2頁
《Java程序設(shè)計教程》05 類和對象_第3頁
《Java程序設(shè)計教程》05 類和對象_第4頁
《Java程序設(shè)計教程》05 類和對象_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章類和對象本章學(xué)習(xí)目標(biāo):理解面向?qū)ο蟪绦蛟O(shè)計的基本思想,特別是類的概念掌握類的設(shè)計方法,對象的創(chuàng)建、使用和刪除掌握訪問控制符及包的使用方法5.1引言Java語言作為一種面向?qū)ο蟮某绦蛟O(shè)計語言,具備面向?qū)ο蠹夹g(shù)的基本屬性。定義類和建立對象是Java編程的主要任務(wù)。本章將介紹Java面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ),即類、對象、包、接口等內(nèi)容。5.2類抽象和封裝是面向?qū)ο蟪绦蛟O(shè)計的重要特點(diǎn),主要體現(xiàn)在類的定義及使用上:類是Java中的一種重要的構(gòu)造類型;封裝了一類對象的屬性和方法,是對這一類對象的抽象。Java的類分為兩大部分:系統(tǒng)定義的類用戶自定義的類publicclassTeacher{ privateStringname; protectedinthours; protectedlongpayment; publicTeacher(Stringname,inthours){ =name; this.hours=hours; this.payment=0; } publicvoidshow(){ System.out.println(name+"工作了"+hours+"小時,應(yīng)付"+payment); } publicvoidcountPayment(){ payment=counting(1000,hours,50,0); } publicvoidresetHour(){ hours=0; } publicvoidaddHour(inth){ hours+=h;} protectedlongcounting(intbase,inth,intperHour,longother){ return(long)base+h*perHour+other; }}類聲明類體成員變量構(gòu)造方法成員方法5.2.1類聲明類聲明格式如下:

[類的修飾符]class類名[extends父類名][implements接口列表]class是聲明一個類的關(guān)鍵字,是必須的,類名是要聲明的類的名字,它必須是一個合法的Java標(biāo)識符。根據(jù)聲明類的需要,類聲明還可以包含三個選項(xiàng):聲明類的修飾符;說明該類的父類;說明該類所實(shí)現(xiàn)的接口。類修飾符public:該關(guān)鍵字將一個類聲明為公共類,公共類在所有類中可見,即它可以在其他任何類中訪問,但在其他包中須用import導(dǎo)入。一個程序的主類必是公共類,主類的public關(guān)鍵字可以缺省,即默認(rèn)為public。在一個Java源文件中只能有一個類被聲明為public,而且一旦有一個類為public,那這個Java源文件的文件名就必須要和這個被public所修飾的類的類名相同,否則編譯不能通過。abstract:聲明該類為抽象類,它沒有實(shí)現(xiàn)的方法,需要子類提供方法實(shí)現(xiàn),因此,它不能被實(shí)例化,即抽象類不能新建對象。final:聲明該類為終態(tài)類,它不能被其他類繼承,即沒有子類。類修飾符沒有類修飾符:即直接聲明classA{},稱為“默認(rèn)訪問模式”,在該模式下,這個類只能被同一個包中的類訪問,這一訪問特性又稱包訪問性。注意:修飾符abstract和修飾符final不能同時修飾同一個類,因?yàn)閍bstract類是沒有具體對象的類,它必須有子類,即就是用來被繼承的;而final類是不可能有子類的類,所以用abstract和final修飾同一個類是無意義的。說明類的父類

[類的修飾符]class類名[extends父類名][implements接口列表]在Java語言中,除了Object類之外,每個類都有一個父類。Object類是Java語言中唯一沒有父類的類。如果某個類沒有指明父類,Java語言就默認(rèn)它是Object類的子類。因此,所有其他類都是Object類的直接子類或間接子類。需要注意的是:在extends之后只能跟唯一的父類名,即使用extends只能實(shí)現(xiàn)單繼承。

[類的修飾符]class類名[extends父類名][implements接口列表]一個類若要實(shí)現(xiàn)一個或多個接口,可以使用關(guān)鍵字implements進(jìn)行聲明,并在其后給出該類要實(shí)現(xiàn)的接口的名稱列表,多個接口名之間以逗號分隔。接口可以看作是100%的抽象類。接口的定義和實(shí)現(xiàn)會在后面介紹。說明一個類所實(shí)現(xiàn)的接口5.2.2類體類體用一對大括號括起。類體中定義了該類中所有的變量和該類所支持的方法:成員變量對應(yīng)類的靜態(tài)屬性方法對應(yīng)類的行為和操作類中所定義的變量和方法都是類的成員。對類的成員可以設(shè)定訪問權(quán)限來限定其他類對它的訪問。訪問權(quán)限有這么幾種:public、protected、private、default。類體成員變量成員變量是類和對象的靜態(tài)屬性,它可以是基本數(shù)據(jù)類型的變量,也可以是其它類(系統(tǒng)類或用戶自定義類)的對象。因此,定義成員變量的操作就是說明變量或創(chuàng)建對象的操作。方法方法是類的動態(tài)屬性,標(biāo)志了類所具有的功能和操作,用來把類和對象的數(shù)據(jù)封裝在一起。Java的方法與其它語言中的函數(shù)或過程類似,是一段完成某種功能的程序段。5.2.3成員變量最簡單的成員變量的聲明方式如下:type成員變量名;

這里的type可以是Java中任意的數(shù)據(jù)結(jié)構(gòu),包括簡單類型、類、接口、數(shù)組。在一個類中的成員變量名應(yīng)該是唯一的。成員變量的作用域是整個類。成員變量1.static用static修飾的成員變量就是靜態(tài)成員變量(類變量)。靜態(tài)成員變量最本質(zhì)的特點(diǎn)是:它們是類的成員變量,不屬于任何一個類的具體對象,它不保存在某個對象的內(nèi)存區(qū)成員變量中,而是保存在類的內(nèi)存區(qū)成員變量的公共存儲單元。換句話說,對該類的具體對象而言,靜態(tài)成員變量是一個公共的存儲單元。任何一個類的對象訪問它,得到的都是相同的值;任何一個類的對象修改它,都是對同一內(nèi)存單元進(jìn)行操作。沒有用static修飾的變量是實(shí)例變量,必須實(shí)例化該類才可以使用實(shí)例變量。該類的不同對象都各自擁有自身的實(shí)例變量的版本。成員變量

定義一個靜態(tài)成員變量a和成員變量b靜態(tài)成員變量a對象1對象2成員變量b成員變量b公共存儲單元成員變量2.finalfinal:用來聲明一個常量。如: classFinalVar{ finalintCONSTANT=50;

…… }此例中聲明了常量CONSTANT,并賦值為50。對于用final限定的常量,在程序中不能改變它的值。通常常量名用大寫字母表示。成員變量3.transienttransient告訴Java虛擬機(jī),在類對象序列化的時候,此變量不需要持久保存。這些信息的生命周期僅存于調(diào)用者的內(nèi)存中而不會被網(wǎng)絡(luò)傳輸或?qū)懙酱疟P里持久保存。4.volatile用來聲明一個共享變量,使得各個線程對該變量的訪問能夠保持一致。5.2.4成員方法方法由方法聲明和方法體組成,其一般格式如下:[public|protected|private][static][final|abstract][native][synchronized]返回值類型方法名(形式參數(shù)列表)

[throws異常列表]{

方法體各語句;}其中返回類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個方法不需要返回值時,則必須聲明其返回類型為void。形式參數(shù)列表指明每個參數(shù)的名字和類型,各參數(shù)之間用逗號分隔,格式為:形參類型1形參名1,形參類型2形參名2,……classCircle{ intx,y,radius; //x,y,radius是成員變量

publicCircle(intx,inty,intradius){//x,y,radius是參數(shù)

……

}}Circle類有三個成員變量:x、y和radius。在Circle類的構(gòu)造函數(shù)中有3個參數(shù),名字也是x、y和radius。在方法中出現(xiàn)的x、y和radius指的是參數(shù)名,而不是成員變量名。如果要訪問這些同名的成員變量,必須通過“當(dāng)前對象”指示符this來引用它。

this.x=x;this.y=y;this.radius=radius;this的含義this表示的是當(dāng)前對象本身,更準(zhǔn)確地說,this代表當(dāng)前對象的一個引用。對象的引用可以理解為對象的另一個名字,通過引用可以順利地訪問到對象,包括訪問、修改對象的成員變量、調(diào)用對象的方法。在Java中,可以把任何具有有效數(shù)據(jù)類型的參數(shù)傳遞到方法中,這些類型必須預(yù)先定義好。另外,參數(shù)的類型既可以是簡單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組類型,類或接口類型)。classPassTest{publicintvalue;publicvoidchangeValue(intvalue){value=this.value;}publicvoidchangeValueByRef(PassTestref){ref.value=999;}}方法參數(shù)表中使用簡單數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別publicclassTest{publicstaticvoidmain(Stringargs[]){PassTestpt=newPassTest();//生成一個PassTest類的實(shí)例pt//簡單數(shù)據(jù)類型intvalue=20;pt.value=10;System.out.println("OriginalIntValueinPassTestis:"+pt.value);pt.changeValue(value);//簡單數(shù)據(jù)類型System.out.println("IntValueafterchangeisstill:"+value);

//引用數(shù)據(jù)類型pt.value=1000;System.out.println("OriginalptValueValueis:"+pt.value); pt.changeValueByRef(pt);System.out.println("ptValueafterchangeis:"+pt.value);}}方法體方法體方法體是對方法的實(shí)現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。方法體中可以聲明該方法中所用到的局部變量,它的作用域只在該方法內(nèi)部,當(dāng)方法返回時,局部變量也不再存在。如果局部變量的名字和類的成員變量的名字相同,則類的成員變量被隱藏。

【例】成員變量和局部變量的作用域示例。classVariable{ intx=0,y=0,z=0;//類的成員變量

voidinit(intx,inty){ this.x=x; this.y=y; intz=5;//局部變量

System.out.println("****ininit****"); System.out.println("x="+x+"y="+y+"z="+z); }}

publicclassVariableTest{ publicstaticvoidmain(Stringargs[]){ Variablev=newVariable(); System.out.println("****beforeinit****"); System.out.println("x="+v.x+"y="+v.y+"z="+v.z); v.init(20,30); System.out.println("****afterinit****"); System.out.println("x="+v.x+"y="+v.y+"z="+v.z); }}5.2.5方法重載方法重載即指多個方法可以享有相同的名字。但是這些方法的參數(shù)必須不同,或者是參數(shù)個數(shù)不同,或者是參數(shù)類型不同。

【例】方法重載應(yīng)用舉例。

classMethodOverloading{

voidreceive(inti){

System.out.println("Receiveoneintdata");

System.out.println("i="+i);

}

voidreceive(intx,inty){

System.out.println("Receivetwointdatum");

System.out.println("x="+x+"y="+y);

}

voidreceive(doubled){

System.out.println("Receiveonedoubledata");

System.out.println("d="+d);

}

voidreceive(Strings){

System.out.println("Receiveastring");

System.out.println("s="+s);

}

}

publicclassMethodOverloadingTest{

publicstaticvoidmain(Stringargs[]){

MethodOverloadingmo=newMethodOverloading();

mo.receive(1);

mo.receive(2,3);

mo.receive(12.56);

mo.receive("veryinteresting,isn'tit?");

}

}voidreceive(inti){……}voidreceive(intx,inty){……}voidreceive(doubled){……}voidreceive(Strings){……}<--receive(1)<--receive(2,3)<--receive(12.56)<--receive("veryinteresting,isn'tit?")重載調(diào)用

重載與調(diào)用關(guān)系Receiveoneintvariablei=1Receivetwointvariablesx=2y=3Receiveonedoublevariabled=12.56Receiveastrings=Veryinteresting!5.2.6構(gòu)造方法被自動調(diào)用的專門的初始化方法稱為構(gòu)造方法.構(gòu)造函數(shù)是類的一種特殊方法,其特殊性如下:構(gòu)造函數(shù)的方法名與類名相同。構(gòu)造函數(shù)沒有返回值。構(gòu)造函數(shù)的作用是對類的對象初始化。在創(chuàng)建一個類的新對象的同時,系統(tǒng)會自動調(diào)用該類的構(gòu)造函數(shù)。構(gòu)造函數(shù)是與類同名的方法,創(chuàng)建對象的語句用new運(yùn)算符開辟了新建對象的內(nèi)存空間后,將調(diào)用構(gòu)造函數(shù)初始化這個新建對象。一般將構(gòu)造方法聲明為公共的public型,如果聲明為private型,那么就不能夠創(chuàng)建對象的實(shí)例了,因?yàn)闃?gòu)造方法是在對象的外部被默認(rèn)地調(diào)用。

Java語言為每一個類提供了一個默認(rèn)的構(gòu)造方法,也就是說,每個類都有構(gòu)造方法,用來初始化該類的一個新的對象。如果不定義一個構(gòu)造方法,Java語言將調(diào)用它提供的默認(rèn)的構(gòu)造方法對一個新的對象進(jìn)行初始化。

在構(gòu)造方法的實(shí)現(xiàn)中,也可以進(jìn)行方法重載?!纠繕?gòu)造方法的實(shí)現(xiàn)。classpoint{

intx,y;

point(){ //定義構(gòu)造方法

x=0;

y=0;

}

point(intx,inty){ //構(gòu)造方法的重載

this.x=x;

this.y=y;

}

}

5.2.7main()方法main()方法是Java應(yīng)用程序必須具備的方法。格式是:

publicstaticvoidmain(Stringargs[]){……}所有Java的獨(dú)立應(yīng)用程序都從main()開始執(zhí)行。把static放在方法名前就使方法變?yōu)殪o態(tài)的方法,即類方法而非實(shí)例方法。5.2.8finalize()方法在對對象進(jìn)行垃圾收集前,Java運(yùn)行時系統(tǒng)會自動調(diào)用對象的finalize()方法來釋放系統(tǒng)資源,如打開的文件或socket。該方法的聲明必須如下所示:protectedvoidfinalize()throwsthrowable注意如果不定義finalize方法,Java將調(diào)用它提供的默認(rèn)的finalize方法進(jìn)行掃尾工作?!纠縡inalize方法舉例。classmyclass{ intm_DataMember1; floatm_DataMember2; publicmyClass(){//構(gòu)造函數(shù)

m_DataMember1=1;//初始化變量

m_DataMember2=7.25; } voidfinalize(){ //定義finalize方法

m_DataMember1=null; //釋放內(nèi)存

m_DataMember2=null; }}5.3對象對象是類的實(shí)例化,對象的創(chuàng)建是通過對象構(gòu)造方法來實(shí)現(xiàn)的;我們可以生成多個對象,通過消息傳遞來進(jìn)行交互,最終完成復(fù)雜的任務(wù);消息傳遞是指激活指定的某個對象的方法,以改變它的狀態(tài)或使其產(chǎn)生一定的動作。一個對象的生命期包括三個階段:創(chuàng)建、使用和清除。5.3.1對象的創(chuàng)建對象的創(chuàng)建包括聲明、實(shí)例化和初始化三方面的內(nèi)容。一般格式為:

typeObjectName=newtype([paramlist]);typeobjectName聲明了一個類型為type的對象,其中type是引用類型(包括類和接口),對象的聲明并不為對象分配內(nèi)存空間。運(yùn)算符new為對象分配內(nèi)存空間,實(shí)例化一個對象。new調(diào)用對象的構(gòu)造方法,返回對該對象的一個引用(即該對象所在的內(nèi)存地址)。生成對象的最后一步是執(zhí)行構(gòu)造方法,進(jìn)行初始化。由于對構(gòu)造方法可以進(jìn)行重寫,所以通過給出不同個數(shù)或類型的參數(shù)會分別調(diào)用不同的構(gòu)造方法。如果類中沒有定義構(gòu)造方法,系統(tǒng)會調(diào)用缺省的空構(gòu)造函數(shù)?!纠慷x類并創(chuàng)建類的對象。classComputer{StringOwner;//成員變量

publicstaticvoidmain(Stringargs[]){}voidset_Owner(Stringowner){//成員方法

Owner=owner;}voidshow_Owner(){ System.out.println("這臺電腦是:"+Owner+"的");}}

classDemoComputer{publicstaticvoidmain(Stringargs[]){ System.out.println("使用類");

Computer

MyComputer=newComputer();//生成類的對象

Mycomputer.set_Owner("知識工程教研室");

Mycomputer.show_Owner();}}ComputerMyComputer=newComputer();等價于:ComputerMyComputer;MyComputer=newComputer();其中MyComputer是對象的名稱,它是一個屬于Coputer類的對象,能夠調(diào)用Computer類中的set_Owner()、show_Owner()方法。5.3.2對象的使用要訪問或調(diào)用一個對象的成員變量或方法,首先訪問該對象,然后用成員運(yùn)算符“.”可以實(shí)現(xiàn)對變量的訪問和方法的調(diào)用。例如:Mycomputer.set_Owner(“知識工程教研室”);Mycomputer.show_Owner();5.3.3對象的清除對象的清除,即系統(tǒng)內(nèi)無用單元的收集。Java運(yùn)行時系統(tǒng)通過垃圾收集周期性地釋放無用對象所使用的內(nèi)存,完成對象的清除。Java采用自動垃圾收集進(jìn)行內(nèi)存管理,使程序員不需要跟蹤每個生成的對象,這是Java的一大優(yōu)點(diǎn)。當(dāng)下述條件滿足時,Java內(nèi)存管理系統(tǒng)將自動完成收集內(nèi)存工作。(1)當(dāng)堆棧中的存儲器數(shù)量少于某個特定水平時;(2)當(dāng)程序強(qiáng)制調(diào)用系統(tǒng)類的方法時;(3)當(dāng)系統(tǒng)空閑時。5.4訪問控制符訪問控制符是一組限定類、成員變量或方法是否可以被程序里的其它部分訪問和調(diào)用的修飾符。類的訪問符只有public。成員變量和方法的訪問控制符有四個:public privateprotected不修飾時采用默認(rèn)行為(default)5.4.1類的訪問控制符1.公共訪問控制符publicJava中類的訪問控制符只有一個:public,即公共類。一個類被聲明為公共類,聲明它可以被所有其他類所訪問和引用,這里的訪問和引用是指這個類作為整體是可見和可使用的。Java的類是通過包來組織,處于同一包中的類可以不需任何說明而方便的互相訪問和引用,而對于處于不同包中的類,缺省的它們是互相之間不可見的。但是,當(dāng)一個類被聲明為public時,它就具有了被其它包中類訪問的可能性,只要這些包中的類在程序中使用import語句引入public類,就可訪問它了。一個類作為整體可見,并不能代表類中的成員變量和方法也一定可見,除非它們也被聲明為public。2.缺省訪問控制符(default)若一個類沒有訪問控制符,說明它具有缺省的訪問控制特性。該訪問控制規(guī)定這樣的類只能被同一個包中的類訪問和引用,而不能被其他包中的類使用,這種訪問特性又稱包訪問性。通過聲明類的訪問控制符可以使整個程序結(jié)構(gòu)清晰、嚴(yán)謹(jǐn),減少可能產(chǎn)生的類之間的干擾和錯誤。

5.4.2對類成員的訪問控制當(dāng)一個類可以被訪問時,對類內(nèi)的成員變量和成員方法而言,其應(yīng)用范圍可以通過施以一定的訪問權(quán)限來限定。同一個類中同一個包中不同包中的子類不同包中的非子類(任意類)private★default★★protected★★★public★★★★classAlpha{ privateintiamprivate;//private成員變量

privatevoidprivateMethod(){//private成員方法

System.out.println("privateMethod"); }}classBeta{ voidaccessMethod(){ Alphaa=newAlpha(); a.iamprivate=10;//非法

a.privateMethod();//非法

}}私有訪問控制符用private修飾的成員變量或方法只能被該類自身所訪問和修改,而不能被任何其它類(包括該類的子類)來獲取和引用。private修飾符提供了最高的保護(hù)級別。缺省訪問控制符(default)類中不加任何防問權(quán)限限定的成員屬于缺省的(default)訪問狀態(tài),可以被這個類本身和同一個包中的類所訪問。這個訪問級別是假設(shè)在相同包中的類是互相信任的。packageGreek;publicclassAlpha{ intiamprivate; voidpackageMethod(){ System.out.println("packageMethod"); }}packageGreek;classBeta{ voidaccessMethod(){ Alphaa=newAlpha(); a.iamprivate=10;//合法

tectedMethod();//合法

}}

Alpha類可以訪問自己的成員,同時所有定義在與Alpha同一個包中的類也可以訪問這些成員。如Alpha和Beta都定義為Greek包的一部分,則Beta可以合法訪問Alpha的成員。保護(hù)訪問控制符protected用protected修飾的成員變量和方法可以被三種類引用:該類自身;與它在同一個包中的其它類;在其它包中的該類的子類。使用protected修飾符的主要作用是允許包中的類和其它包中的子類來訪問父類的特定屬性。公共訪問控制符public被定義為public的方法是這個類對外的接口部分,程序的其它部分通過調(diào)用public方法達(dá)到與當(dāng)前類交換信息、甚至影響當(dāng)前類的目的。用public修飾的成員變量被稱為公共成員變量,如果一個公共成員變量屬于一個公共類,則它可被所有其它類所引用。public修飾符會造成安全性和數(shù)據(jù)封裝性下降,所以一般應(yīng)減少public成員變量的使用。訪問控制符小結(jié)①公共訪問控制符(public):public類:公共類,可以被其他包中類引入后訪問。public方法:是類的接口,用于定義類中對外可用的功能方法。public變量:可以被其他類訪問。②缺省訪問控制符的類、變量、方法:具有包訪問性(只能被同一個包中的類訪問)。③私有訪問控制符(private):修飾變量或方法,只能被該類自身所訪問。④保護(hù)訪問控制符(protected):修飾變量或方法,可以被類自身、同一包中的類、任意包中該類的子類所訪問。5.5包利用Java語言開發(fā)實(shí)際系統(tǒng)時,可以利用“包”來管理類。包是類和接口的集合,為了方便編程和管理,通常把需要在一起工作的類放在一個包里。為Java創(chuàng)建一個源碼文件的時候,它通常叫做一個“編輯單元”,每個編輯單元必須有一個以java結(jié)尾的名字。缺省情況下,系統(tǒng)為每個.java源文件創(chuàng)建一個無名包,該文件中定義的所有類都隸屬于該包,但由于該包無名字,所以不能被其它包引用。為了解決這個問題,就要創(chuàng)建有名包。Java類庫中常用的標(biāo)準(zhǔn)包列表

包功能描述java.applet包含用于創(chuàng)建Java小應(yīng)用程序的類java.awt存放了構(gòu)建圖形化用戶界面(GUI)的類javax.swing提供了更加豐富的、精美的、功能強(qiáng)大的GUI組件類java.io包含用于輸入輸出(I/O)處理的類java.1ang包含一些最基本的Java核心類。隱

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論