第三章面向對象_第1頁
第三章面向對象_第2頁
第三章面向對象_第3頁
第三章面向對象_第4頁
第三章面向對象_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章面向對象本章內(nèi)容編程語言的發(fā)展面向過程的設計思想面向對象的設計思想對象和類的概念類之間的關系對象和引用Java類的定義構造函數(shù)對象的創(chuàng)建和使用this關鍵字static關鍵字package和import語句類的繼承方法的重寫final關鍵字對象轉型多態(tài)抽象類接口編程語言的發(fā)展機器語言---直接由計算機的指令組成,指令、數(shù)據(jù)、地址都是以“0”和“1”的符號串組成;可以被計算機直接執(zhí)行。匯編語言---用容易理解和記憶的符號表示指令、數(shù)據(jù)以及寄存器等,抽象層次很低,程序員需要考慮大量的機器細節(jié)。高級語言---屏蔽了機器的細節(jié),提高了語言的抽象層次,接近于人的自然語言,60年代出現(xiàn)的結構化編程語言提出了結構化數(shù)據(jù)和語句,數(shù)據(jù)和過程抽象等概念。面向對象的語言---與以往的各種語言的根本不同的是,它的設計出發(fā)點是為了更能直接的描述問題域中客觀存在的事物。語言的發(fā)展是朝著人類更容易理解的方向前進面向對象設計的思想面向對象設計的基本思想是,從現(xiàn)實世界中客觀存在的事物出發(fā)來構造軟件系統(tǒng),并在系統(tǒng)的構造中盡可能運用人類的自然思維方式。面向對象更加強調(diào)運用人類在日常的思維邏輯中經(jīng)常采用的思想方法與原則,如抽象、分類、繼承、聚合、多態(tài)等。面向過程的設計思想和面向對象的設計思想我要去新疆面向過程我開車,我掛檔,我踩油門,我過河北,我過陜西……面向對象我命令車去新疆車怎么去不關我的事信息封存在車這個類的內(nèi)部我不用去了解車整個開動的過程對象和類的概念對象是用計算機語言對問題域中事物的描述,對象通過“屬性(attribute)”和“方法(method)”來分別對應事物所具有的靜態(tài)屬性和動態(tài)屬性。類是用于描述同一類型的對象的一個抽象的概念,類中定義了這一類對象所具有的靜態(tài)和動態(tài)屬性。類可以看成一類對象的模板,對象可以看成該類的一個具體實例。類(對象)之間的關系之關聯(lián)關系繼承關系(一般和特殊)XX是一種XX聚合關系(整體和部分)實現(xiàn)關系多態(tài)課堂練習抽象出下面系統(tǒng)中的“類”及其關系我要去新疆,這句話中的類和方法是什么?Java與面向對象對象是Java程序的核心,在Java程序中“萬事萬物皆對象”。對象可以看成是靜態(tài)屬性(成員變量)和動態(tài)屬性(方法)的封裝體。類是用來創(chuàng)建同一類型的對象的“模板”,在一個類中定義了該類對象所應具有的成員變量以及方法。J2SDK提供了很多類供編程人員使用,編程人員也可以定義自己的類。我們的語言:成員變量=屬性方法=函數(shù)為什么用對象?面向對象的編程---一組對象互相配合通過溝通完成特定功能所有paradigm(范例)都是對現(xiàn)實問題的抽象匯編是對機器語言的抽象面向過程的語言是對匯編語言的抽象對象更加符合對于現(xiàn)實問題的抽象對象都有對外服務的接口通過繼承可以復用對象隱藏內(nèi)部服務的實現(xiàn)通過聚合可以復用面向對象更加容易使我們達到這些年來苦苦追求的境界Reusable、Extensibility、維護和替換更加方便組件---比對象更高層次的抽象(二進制級別)EJB、WebService、CORBA、COM、…成員變量成員變量可以是Java語言中任何一種數(shù)據(jù)類型(包括基本類型和引用類型)。在定義成員變量時可以對其初始化,如果不對其初始化,Java使用默認的值對其初始化。(右圖)成員變量的作用范圍為整個類體。Dog.java面向對象基本概念—引用

Java語言中除基本類型之外的變量型都稱之為引用類型。

Java中的對象是通過引用對其操作的。例如:/**聲明了一個String類型的引用變量,*但并沒用使用它指向一個對象*/Strings;/*使用new語句創(chuàng)建了一個String類型的*對象并用s指向它,以后可以通過s完成*對其的操作*/s=newString(“Helloworld”);如何在內(nèi)容中區(qū)分類和對象?類是靜態(tài)的概念,在代碼區(qū)對象是new出來的,位于堆內(nèi)存,類的每個成員變量來自不同的對象中都有不同的值(除了靜態(tài)變量),而方法只有一份,執(zhí)行的時候才占有內(nèi)存。對象的創(chuàng)建和使用必須使用new關鍵字創(chuàng)建對象。使用對象(引用).

成員變量來引用對象的成員變量。使用對象(引用).

方法(參數(shù)列表)來調(diào)用對象的方法。同一類的每個對象有不同的成員變量存儲空間。同一類的每個對象共享該類的方法。類和對象的關系構造方法(構造函數(shù))使用new+構造方法創(chuàng)建一個新的對象。構造函數(shù)是定義在Java類中的一個用來初始化對象的函數(shù)。構造函數(shù)與類同名且沒有返回值。例如:Person類的構造函數(shù)publicclassPerson{intid;intage;Person(intn,inti){id=n;age=i;}}構造函數(shù)

創(chuàng)建對象時,使用構造函數(shù)初始化對象的成員變量。

publicclassTest{publicstaticvoidmain(Stringargs[]){Persontom=newPerson(1,25);Personjoin=newPerson(2,27);Personkate=newPerson();}}構造函數(shù)

當沒有構造函數(shù)時,編譯器為類自動添加形如類名(){}

的構造函數(shù)。例如:classPoint{publicintx;publicinty;}---Pointp=newPoint();---約定俗成的命名規(guī)則類名的首字母大寫變量名和方法的首字母小寫運用駝峰標識實例(1)//定義如下類:classBirthDate{ privateintday; privateintmonth; privateintyear; publicBirthDate(intd,intm,inty){ day=d;month=m;year=y; } publicvoidsetDay(intd){day=d;} publicvoidsetMonth(intm){month=m;} publicvoidsetYear(inty){year=y;} publicintgetDay(){returnday;} publicintgetMonth(){returnmonth;} publicintgetYear(){returnyear;} publicvoiddisplay(){ System.out.println(day+“–”+month+“–”+year); }}實例(2)publicclassTest{ publicstaticvoidmain(Stringargs[]){ Testtest=newTest(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); System.out.println(“date=”+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){ b.setDay(22); }}方法的重載方法的重載是指一個類中可以定義有相同的名字,但參數(shù)不同的多個方法。調(diào)用時,會根據(jù)不同的參數(shù)表選擇對應的方法。例如:在Person類中添加如下的方法:voidinfo(){System.out.println(“Myidis”+id);}voidinfo(Stringt){System.out.println(t+“”+id+”“+age);}//運行如下程序publicclassTest{publicstaticvoidmain(Stringargs[]){Personp=newPerson(1,20);();(“hello”);}}構造方法的重載與普通方法一樣,構造方法也可以重載;例如:課本79頁Student類的構造方法作業(yè)創(chuàng)建一個基本類Desk,描述桌子的長、寬、高和顏色屬性,其中長、寬、高用double數(shù)據(jù)類型,顏色用String型。在基本類Desk中添加構造方法Desk(doublea,doublew,doubleh),用來在創(chuàng)建桌子對象時指定桌子的長、寬、高,顏色設置一個默認值“白色”。在基本類Desk中添加構造方法Desk(Stringc),用來在創(chuàng)建桌子對象時指定桌子的顏色,長款高都設置默認值1.0再加一個構造方法,通過長寬高和顏色四個屬性來定制桌子在測試類中創(chuàng)建長為1.2,寬為2.5,高為1.0,顏色為黃色的桌子,添加輸出語句在控制臺上顯示該桌子的長寬高和顏色。復習:對象的創(chuàng)建和使用必須使用new關鍵字創(chuàng)建對象。使用對象.成員變量來引用對象的成員變量。使用對象.方法(參數(shù)列表)來調(diào)用對象的方法。同一類的每個對象有不同的成員變量存儲空間。同一類的每個對象共享該類的方法。非靜態(tài)方法是針對每個對象進行調(diào)用變量的分類和作用域局部變量:定義在塊內(nèi)、方法內(nèi)的變量(包括方法的參數(shù))。作用域是以塊和方法為單位的,僅在定義該變量的塊或方法內(nèi)有效先定義賦值,然后再使用,不可以超前使用在查找時,首先被查找。若局部變量與類成員變量名相同時,則該類成員變量在方法體內(nèi)被暫時“屏蔽”起來。方法體內(nèi)不能定義靜態(tài)變量。類成員變量:定義在類內(nèi)、方法外的變量,使用了修飾符static的變量是靜態(tài)變量,也稱為類變量。作用域是以類為單位的一般情況下,類成員變量應該先定義后使用。但類成員變量可以超前引用,即在定義位置前引用,但靜態(tài)變量不能超前引用靜態(tài)變量。注意:類外面不能有變量的聲明this關鍵字在類的方法定義中使用的this關鍵字代表使用該方法的對象的引用。當必須指出當前使用方法的對象是誰時要使用this。有時使用this可以處理方法中成員變量和參數(shù)變量重名的情況。this可以看作是一個變量,它的值是當前對象的引用??梢允褂胻his調(diào)用本類的其他構造方法,但該語句出現(xiàn)的位置要求是所隸屬的構造方法的第一條可執(zhí)行語句。Leaf.javaBall.javathis使用方法總結利用this.可以調(diào)用當前對象的方法或屬性。一個類的若干構造方法之間可以互相調(diào)用,當一個構造方法需要調(diào)用另一個構造方法時,應使用this(實參列表),同時這條調(diào)用語句應該是整個構造方法中的第一條可執(zhí)行語句。在利用this調(diào)用構造方法時,根據(jù)實參的個數(shù)匹配調(diào)用的是那個其他的構造方法。當方法需返回當前正在討論的對象時,可以使用returnthis形式。static關鍵字在類中,用static聲明的成員變量為靜態(tài)成員變量,它為該類的公用變量,在第一次使用時被初始化,對于該類的所有對象來說,static成員變量只有一份。用static聲明的方法為靜態(tài)方法,在調(diào)用該方法時,不會將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員??梢酝ㄟ^對象引用或類名(不需要實例化)訪問靜態(tài)成員。Cat.javaEmpTest.java靜態(tài)初始化器靜態(tài)屬性和非靜態(tài)屬性都需要初始化,非靜態(tài)屬性的初始化可以在聲明的同時進行,也可以放在構造方法中完成。而對于靜態(tài)屬性,這兩種方式的初始化效果不同。Student.java作為靜態(tài)屬性,可以在靜態(tài)初始化器中完成初始化靜態(tài)屬性可以在兩個地方完成初始化賦值工作,一是在聲明時,二是在靜態(tài)初始化器中。語法如下:static{

靜態(tài)屬性名=初始值;}package和import語句為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,Java引入包(package)機制,提供類的多重命名空間。package和import語句package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對應于文件系統(tǒng)的目錄管理,package語句中,用‘.’來指明包(目錄)的層次,例如使用語句packagecom.sww;則該文件中所有的類位于.\com\sww目錄下設置Classpath變量javac–d.Book.javapackage和import語句如果將一個類打包,則使用該類時,必須使用該類的全名(例如:com.sww.MyClass),Java編譯器才會找到該類。也可以使用import在文件的開頭引入要使用到的類,例如:可以不需要用import語句直接使用java.lang包中的類。

importcom.sww.MyClass;importjava.util.*;//引入java.util包中的所有的類

………MyClassmyClass=newMyClass();//可以直接使用類名

………packageimport總結如果想將一個類放入包中,在這個類源文件第一句話寫package必須保證該類的class文件位于正確目錄下該類的源碼可能會產(chǎn)生影響刪除或轉移到另外的目錄另外的類想訪問的話:寫全名引入.具體類名訪問位于同一個包中的類不需要引入必須使class文件的最上層包的父目錄位于classpath下J2SDK中主要的包介紹java.lang—包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供常用的功能。java.awt---包含了構成抽象窗口工具類(abstractwindowtoolkits)的多個類,這些類被用來構建和管理應用程序的圖形用戶界面(GUI)。java.applet—包含applet運行所需的一些類?!瑘?zhí)行與網(wǎng)絡相關的操作的類。java.io—包含能提供多種輸入/輸出功能的類。java.util—包含一些使用工具類,如定義系統(tǒng)特性、使用與日期日歷相關的函數(shù)。jar-cvfxx.jar*.*類的繼承與權限控制Java中使用extends關鍵字實現(xiàn)類的繼承機制,其語法規(guī)則為:

<modifier>class<name>[extends]<superclass>]{……}通過繼承,子類自動擁有了基類(superclass)的所有成員(成員變量和方法)。java只支持單繼承,不允許多繼承;一個子類只能有一個基類一個基類可以派生出多個子類//繼承中的權限控制classParent{privateintn_private=1;intn_friendly=2;protectedintn_protected=3;publicintn_public=4;}classChildextendsParent{publicvoidf(){n_private=10;n_friendly=20;n_protected=30;n_public=40;}}訪問控制Java權限修飾符publicprotectedprivate置于類的成員定義前,用來限定其他對象對該類對象成員的訪問權限。對于class的權限修飾只可以用public和defaultpublic類可以在任意地方被訪問

default類只可以被同一個包內(nèi)部的類訪問Rectangle.javaCubic.java繼承中的訪問修飾符父子類在同一包中定義子類可以無條件地繼承父類的所有非私有屬性父子類在不同包中定義只有父類中被public和protected修飾的屬性能被子類繼承下來父類中缺省修飾符修飾的屬性不能被子類所引用方法的重寫在子類中可以根據(jù)需要對從基類中繼承來的方法進行重寫。重寫方法必須和被重寫方法具有相同方法名稱、參數(shù)列表和返回類型。重寫方法不能使用比被重寫方法更嚴格的訪問權限。TestOverWrite.javasuper關鍵字在Java中使用super來引用基類的成分;例如:

classFatherclass{publicintvalue;publicvoidf(){value=100;system.out.println(“FatherClass.value=”+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;System.out.println(“ChildClass.value=”+value);System.out.println(value);System.out.println(super.value);}}TestInherit.java繼承中的構造方法子類的構造過程中必須調(diào)用其基類的構造方法。子類可以在自己的構造方法中使用super(argument_list)調(diào)用基類的構造方法。使用this(argument_list)調(diào)用本類的另外的構造方法如果使用super,必須寫在子類構造方法的第一行如果子類的構造方法中沒有顯式地調(diào)用基類構造方法,則系統(tǒng)默認調(diào)用基類無參數(shù)的構造方法。如果子類構造方法中既沒有顯式調(diào)用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯。TestSuperSub.java課堂練習classA{ protectedvoidprint(Strings){ System.out.println(s); } A(){print(“A()”);} publicvoidf(){print(“A:f()”);}}classBextendsA{ B(){super();print(“B()”);} publicvoidf(){print(“B:f()”);} publicstaticvoidmain(Stringargs[]){ Bb=newB();b.f(); }}

分析輸出結果,體會構造函數(shù)和一般成員函數(shù)在繼承中的區(qū)別。OverWriteOverRide實例(1)classPerson{ privateStringname; privateStringlocation; Person(Stringname){ =name; location=“beijing”; } Person(Stringname,Stringlocation){ =name; this.location=location; } publicStringinfo(){ return“name:“+name+”location:“+location; }}classStudentextendsPerson{ privateStringschool; Student(Stringname,Stringschool){ this(name,school,”beijing”); }

Student(Stringn,Stringl,Stringschool){ super(n,l); this.school=school; } publicStringinfo(){ ()+”school:“+school; }}實例(2)publicclassTest{ publicstaticvoidmain(String[]args){ Personp1=newPerson(“A”); Personp2=newPerson(“B”,”shanghai”); Students1=newStudent(“C”,”S1”); Students2=newStudent(“C”,”shanghai”,”S2”); System.out.println(()); System.out.println(()); System.out.println(()); System.out.println(()); }}分析輸出結果和對象的構造過程:課堂練習根據(jù)上面的程序,構造“Teacher”類,繼承“Person”類。要求:增加”職稱(String)”屬性.具有和”Student”類類似的重載構造方法.重寫“Person”類的info()方法,增加職稱信息.Object類Object類是所有Java類的根基類如果在類的聲明中未使用extends關鍵字指明其基類,則默認基類為Object類

publicclassPerson{…….}

等價于:

publicclassPersonextendsObject{……}toString方法Object類中定義有publicStringtoString()方法,其返回值是String類型,描述當前對象的有關信息。在進行String與其它類型數(shù)據(jù)的連接操作時(如:System.out.println(“info”+person)),將自動調(diào)用該對象類的toString()方法可以根據(jù)需要在用戶自定義類型中重寫toString()方法。TestToString.javaequals方法Object類中定義有:publicbooleanequals(Objectobj)方法提供定義對象是否“相等”的邏輯。Object的equals方法定義為:x.equals(y)當x和y是同一個對象的引用時返回true否則返回falseJ2SDK提供的一些類,如String,Date等,重寫了Object的equals方法,調(diào)用這些類的equals方法,x.equals(y),當x和y所引用的對象是同一類對象且屬性內(nèi)容相等時(并不一定是相同對象),返回true否則返回false??梢愿鶕?jù)需要在用戶自定義類中重寫equals方法。TestEquals.java對象轉型(casting)一個基類的引用類型變量可以“指向”其子類的對象。一個基類的引用不可以訪問其子類對象新增加的成員(屬性和方法)??梢允褂靡米兞縤nstanceof類名來判斷該引用型變量所“指向”的對象是否屬于該類或該類的子類。子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之稱為向下轉型(downcasting)對象轉型實例1(1)classAnimal{ publicStringname; Animal(Stringname){ =name; }classCatextendsAnimal{ publicStringeyesColor; Cat(Stringn,Stringc){ super(n);eyeColor=c; }}classDogextendsAnimal{ publicStringfurColor; Dog(Stringn,Stringc){ super(n);furColor=c; }}對象轉型實例1(2)publicclassTest{ publicstaticvoidmain(Stringargs[]){ Animala=newAnimal(“name”); Catc=newCat(“catname”,”blue”); Dogd=newDog(“dogname”,”black”); System.out.println(ainstanceofAnimal);//true System.out.println(cinstanceofAnimal);//true System.out.println(dinstanceofAnimal);//true System.out.println(ainstanceofCat);//false a=newDog(“bigyellow”,“yellow”); System.out.println();//bigyellow System.out.println(a.furColor);//!error System.out.println(ainstanceofAnimal);//true

System.out.println(ainstanceofDog);//true Dogd1=(Dog)a;//要加強制轉換符

System.out.println(d1.furColor);//yellow }}對象轉型實例2publicclassTest{ publicstaticvoidmain(String[]args){ Testtest=newTest(); Animala=newAnimal(“name”); Catc=newCat(“catname”,“blue”); Dogd=newDog(“dogname”,”black”; test.f(a);test.f(c);test.f(d); } publicvoidf(Animala){ System.out.println(“name:“+); if(ainstanceofCat){ Catcat=(Cat)a; System.out.println(““+cat.eyesColor+”eyes”); }elseif(ainstanceofDog){ Dogdog=(Dog)a; System.out.println(““+dog.furColor+”fur”); } }}動態(tài)綁定和多態(tài)動態(tài)綁定是指在執(zhí)行期間(而非編譯期)判斷所引用對象的實際類型,根據(jù)其實際的類型調(diào)用其相應的方法。上面例子中,根據(jù)Lady對象的成員變量pet所引用的不同的實際類型而調(diào)用相應的enjoy方法。classBirdextendsAnimal{ privateStringfeatherColor; Bird(Stringn,Stringf){ super(n); featherColor=f; } publicvoidenjoy(){ System.out.pringln(“鳥叫聲……”); }publicclassTest{ publicstaticvoidmain(Stringargs[]){ Ladyl3=newLady(“l(fā)3”,newBird(“birdname”,”green”); ls.myPetEnjoy(); }}動態(tài)綁定使軟件可擴展性達到極致,三個條件:1要有繼承2要有重寫3父類引用指向子類對象TestPolymoph.java抽象類用abstract關鍵字來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法。含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。抽象類不能被實例化抽象方法只需聲明,而不需實現(xiàn)。abstractclassAnimal{privateStringname;Animal(Stringname){=name;}publicabstractvoidenjoy();}classCatextendsAnimal{privateStringeyesColor;Cat(Stringn,Stringc){super(n);eyesColor=c;}publicvoidenjoy(){System.out.println(“貓叫聲……”);}}final關鍵字final的變量的值不能夠被改變final的成員變量final的局部變量(形參)final的方法不能夠被重寫final的類不能夠被繼承String,Math等類都屬于finalTestFinal.java接口接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。接口定義舉例:publicinterfaceRunner{publicstaticfinalintid=1;publicvoidstart();publicvoidrun();publicvoidstop();}接口特性接口可以實現(xiàn)多重實現(xiàn);接口中聲明的屬性默認為publicstaticfinal的;也只能是publicstaticfinal的;接口中只能定義抽象方法,而且這些方法默認為public的、也只能是public的;接口可以繼承其他的接口,并添加新的屬性和抽象方法。接口多個無關的類可以實現(xiàn)同一個接口。一個類可以實現(xiàn)多個無關的接口。與繼承關系類似,接口與實現(xiàn)類之間存在多態(tài)性。定義Java類的語法格式

<modifier>class<name>[extends<superclass>][implements<interface>[,<interface>]*]{<declarations>*}接口舉例interfaceSinger{publicvoidsing();publicvoidsleep();}classStudentimplementsSinger{privateStringname;Student(Stringname){=name;}publicvoidstudy(){System.out.println(“studying”);}publicStringgetName(){returnname;}publicvoidsing(){System.out.println(“studentissinging”);}publicvoidsleep(){System.out.println(“studentissle

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論