版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象高級程序相關設計2主要內容5.1繼承5.2多態(tài)性5.3抽象類和抽象方法5.4接口5.5內部類和匿名類35.1繼承5.1.1創(chuàng)建子類5.1.2成員變量的隱藏和方法的重寫5.1.3super5.1.4對象的上轉型對象45.1.1創(chuàng)建子類繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,我們可以先創(chuàng)建一個擁有共同屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的新類。由繼承而得到的類稱為子類(subclass),被繼承的類稱為父類(或叫超類,superclass)。直接或間接被繼承的類都是父類。子類繼承父類的狀態(tài)和行為,同時也可以修改父類的狀態(tài)或重寫父類的行為,并添加新的狀態(tài)和行為。Java中不支持多重繼承。55.1.1創(chuàng)建子類通過在類的聲明中加入extends子句來創(chuàng)建一個類的子類,其格式如下:
classSubClassextendsSuperClass{
……}
上面的代碼把SubClass聲明為SuperClass的直接子類。如果SuperClass又是某個類的子類,則SubClass同時也是該類的(間接)子類。子類可以繼承父類的成員變量和方法。如果缺省extends子句,則該類為的子類。子類可以繼承父類中訪問權限設定為public、protected、default的成員變量和方法。但是不能繼承訪問權限為private的成員變量和方法。65.1.1創(chuàng)建子類75.1.1創(chuàng)建子類PublicclassMammalClass{
Stringname,eyeColor;intage;publicMammalClass(){name=“thename”;eyeColor=“black”;age=0;}}85.1.1創(chuàng)建子類注意,MammalClass類擁有來自于DogClass和CatClass的相同屬性,包括了name、eyeColor、age等?,F(xiàn)在我們可以利用繼承重寫DogClass和CatClass。publicclassDogClassextendsMammalClass{
booleanhasTail;//name,eyeColor,age已經(jīng)從父類繼承
publicDogClass(){//隱式調用super()name="Chase";
eyeColor="Black";
age=2;hasTail=true;}}95.1.1創(chuàng)建子類【例5-1】
繼承的簡單例子classFather{//父類
privateintmoney;floatweight,height;Stringhead;Stringspeak(Strings){returns;}}classSonextendsFather{//子類
Stringhand,foot;}Weight,height,head,Speak();Hand,foot105.1.1創(chuàng)建子類【例5-1】
繼承的簡單例子publicclassTestExtend{publicstaticvoidmain(Stringargs[]){Sonboy=newSon();boy.weight=120f;boy.height=1.8f;boy.head="一個頭";boy.hand="兩只手";boy.foot="兩只腳";System.out.println("我是兒子");System.out.println("我有:"+boy.hand+"、"+boy.foot+"、"+boy.head+"、重"+boy.weight+"、高"+boy.height);}}上面程序運行結果如下:我是兒子我有:兩只手、兩只腳、一個頭、重120.0、高1.8115.1.1創(chuàng)建子類
如果子類和父類不在同一個包中,那么,子類可以繼承了父類的protected、public修飾的成員變量做為子類的成員變量,并且也可以繼承了父類的protected、public修飾的方法作為子類的方法。另外子類和父類不在同一個包中,則子類不能繼承父類的default變量和default方法。
125.1.1創(chuàng)建子類
【例5-2】繼承不同包中的類的簡單例子//HouseHold.javapackagexing.house;publicclassHouseHold{//家類
protectedStringaddress;//地址保護型
publicStringsurnname;//姓公共型
Stringgivenname;//名缺省
publicHouseHold(Stringadd){address=add;}protectedStringgetAddress(){returnaddress;}voidsetMoney(Stringnewadd){address=newadd;}voidsetAddress(Stringadd){address=add;}}135.1.1創(chuàng)建子類
//Mikey.java:packagexing.friend;importxing.house.HouseHold;publicclassMikeyextendsHouseHold{publicMikey(){super("Starflightstreet110");}publicstaticvoidmain(Stringargs[]){Mikeymikey=newMikey();//mikey.givenname=“Johnson”;//非法
mikey.surnname="Math";//合法.mikey.address="Starflightstreet110";//合法.Stringm=mikey.getAddress();//合法
//mikey.setAddress("Starflightstreet110");//非法.System.out.println(mikey.surnname+":"+m);}}145.1.1創(chuàng)建子類
程序編譯和運行過程如下:155.1.2成員變量的隱藏和方法的重寫
當我們在子類中定義的成員變量和父類中的成員變量同名時,此時稱子類的成員變量隱藏了父類的成員變量。當子類中定義了一個方法,并且這個方法的名字,返回類型,參數(shù)個數(shù)以及類型和父類的某個方法完全相同時,父類的這個方法將被隱藏,這時我們說重寫了父類的方法。子類通過成員變量的隱藏和方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。165.1.2成員變量的隱藏和方法的重寫
例如下面的這段程序就是這樣的情況:classSuperClass{//父類
inty;
voidsetY(){y=0;}}classSubClassextendsSuperClass{inty;//父類變量y被隱藏
voidsetY(){//重寫父類的方法setY()y=1;
}}175.1.3super
5.1.3super
子類在隱藏了父類的成員變量或重寫了父類的方法后,常常還要用到父類的成員變量,或在重寫的方法中使用父類中被重寫的方法以簡化代碼的編寫,這時就要訪問父類的成員變量或調用父類的方法,Java中通過super來實現(xiàn)對父類成員的訪問。我們知道,this用來引用當前對象,與this類似,super用來引用當前對象的父類。super的使用可以分為下面三種情況:
1)用來訪問父類被隱藏的成員變量,如:
super.variable2)用來調用父類中被重寫的方法,如:
super.Method([paramlist]):
3)用來調用父類的構造方法,如:
super([paramlist]);185.1.3super
【例5-3】調用父類的構造方法的例子classA{//類Apublicintn;//公共類型的成員變量
publicA(){ }
publicA(intn){this.n=n;}intmethod(){returnn;}}publicclassBextendsA{//類BpublicB(){super(15);}publicstaticvoidmain(Stringargs[]){AaInstance=newB();intb=aInstance.method();System.out.println("類A中的成員變量:"+b);}}19Super的使用---調用父類的方法classsuperClass{inty;superClass(){y=30;System.out.println("insuperClass:y="+y);}voiddoPrint(){System.out.println("InsuperClass.doPrint()");}}例子5-4調用父類的方法20classsubClassextendssuperClass{inty;subClass(){super();//調用父類的構造方法(多余的)
y=50;System.out.println("insubClass:y="+y);}voiddoPrint(){super.doPrint();//調用父類的方法
System.out.println("insubClass.doPrint()");System.out.println("super.y="+super.y+"sub.y="+y);}}publicclassinviteSuper{publicstaticvoidmain(Stringargs[]){subClasssubSC=newsubClass();subSC.doPrint();}}21對象的上轉型對象
假設A類是B類的父類,classBextendsA{……}當我們用子類創(chuàng)建一個對象,并把這個對象的引用放到父類的對象中時,例如
Aa;Aa=newB();
或
Aa;Bb=newB();a=b;
稱這個父類對象a,是子類對象b的上轉型對象。22對象的上轉型對象
對象的上轉型對象的實體是子類負責創(chuàng)建的,但上轉型對象會失去原對象的一些屬性和功能。上轉型對象具有如下特點:
1)上轉型對象不能操作子類新增的成員變量和子類新增的方法。
2)上轉型對象可以操作子類繼承或重寫的成員變量,也可以使用子類繼承的或重寫的方法。
3)如果子類重寫了父類的某個方法后,當對象的上轉對象調用這個方法時一定是調用了這個重寫的方法,因為程序在運行時知道,這個上轉對象的實體是子類創(chuàng)建的,只不過損失了一些功能而已。不要將父類創(chuàng)建的對象和子類對象的上轉型對象相混淆。上轉型對象在Java編程中是常見的。
可以將對象的上轉型對象再強制轉換到一個子類對象,這時,該子類對象又具備了子類所給的所有屬性和功能。
23對象的上轉型對象
【例5-5】上轉型對象的使用classMammal{//哺乳動物類privateintn=40;voidcrySpeak(Strings){System.out.println(s);}}publicclassMonkeyextendsMammal{//猴子類voidcomputer(intaa,intbb){intcc=aa*bb;System.out.println(cc);}voidcrySpeak(Strings){System.out.println("**"+s+"**");}publicstaticvoidmain(Stringargs[]){//mammal是Monkey類的對象的上轉型對象.Mammalmammal=newMonkey();mammal.crySpeak("Ilovethisgame");//mammalputer(10,10);//把上轉型對象強制轉化為子類的對象.Monkeymonkey=(Monkey)mammal;monkeyputer(10,10);}}24對象的上轉型對象
上述程序的運行結果為:**Ilovethisgame**100在上述例子中,上轉對象mammal調用方法:mammal.crySpeak("Ilovethisgame");得到的結果是”**Ilovethisgame**”。而不是“Ilovethisgame”。因為mammal調用的是子類重寫的方法crySpeak。在main()中,如果出現(xiàn)下面的兩行代碼,那將是錯誤的:mammal.n=1000;//因為子類本來就沒有繼承n。mammalputer(10,10);//因為computer方法是子類新增的方法。25第5章面向對象高級程序設計5.1繼承5.2多態(tài)性5.3抽象類和抽象方法5.4接口5.5內部類和匿名類265.2多態(tài)性
多態(tài)(Polymorphism)的意思就是用相同的名字來定義不同的方法。在Java中,普通類型的多態(tài)為重載,這就意味著可以使幾個不同的方法使用相同的名字,這些方法以參數(shù)的個數(shù)不同、參數(shù)的類型不同等方面來進行區(qū)分,以使得編譯器能夠進行識別。重載是Java實現(xiàn)多態(tài)性的方式之一。例如:family()方法可以有三個版本,如下:
family(){}family(Stringch){address=ch;}family(Stringch,floatn){address=ch;pay=n;}
這些方法并存于程序中,編譯時,編譯器根據(jù)實參的類型和個數(shù)來區(qū)分從而調用那個方法。這在其它語言的程序中,如C,那將導致災難性的錯誤。275.2多態(tài)性【例5-6】構造方法重載的例子classperson{Stringname="Johnson";//姓名
intage=45;//年齡
person(){}
person(Stringa){name=a;}
person(Stringa,intb){name=a;age=b;}publicvoiddisplay(){System.out.println("Name=“+name+","+"Age="+age);}}publicclassPoly{publicstaticvoidmain(String[]args){personko1=newperson();ko1.display();personko2=newperson("Mike");Ko2.display();personko3=newperson("Willian",50);ko3.display();}}285.2多態(tài)性
在Java語言中,多態(tài)性主要體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法重寫實現(xiàn)的動態(tài)多態(tài)性(運行時多態(tài)),如下:
1)編譯時多態(tài)
在編譯階段,具體調用哪個被重載的方法,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調用相應的方法。
2)運行時多態(tài)
如果子類重寫了父類的方法,那么重寫方法的調用原則如下:Java運行時系統(tǒng)根據(jù)調用該方法的實例,來決定調用哪個方法。對子類的一個實例,如果子類重寫了父類的方法,則運行時系統(tǒng)調用子類的方法;如果子類繼承了父類的方法(未重寫),則運行時系統(tǒng)調用父類的方法。另外,方法重寫時應遵循的原則如下:改寫后的方法不能比被重寫的方法有更嚴格的訪問權限。改寫后的方法不能比被重寫的方法產生更多的異常。
進行方法重寫時必須遵從這兩個原則,否則編譯器會指出程序出錯。295.2多態(tài)性【例5-7】方法重寫的例子classParent{publicvoidfunction(){
System.out.println("IaminParent!");}}classChildextendsParent{
privatevoidfunction(){System.out.println("IaminChild!");}}publicclassRTpolyTest{publicstaticvoidmain(Stringargs[]){Parentpl=newParent();Parentp2=newChild();p1.function();p2.function();}}305.2多態(tài)性編譯過程如下:D:\user\chap05>JavacRTpolyTest.javaRTpolyTest.java:8:function()inChildcannotoverridefunction()inParent;attemptingtoassignweakeraccessprivileges;waspublicprivatevoidfunction(){^RTpolyTest.java:16:cannotfindsymbolsymbol:variablep1location:classRTpolyTestp1.function();^2errors可以看出,該程序中實例p2調用function()方法時會導致訪問權限的沖突。
31第5章面向對象高級程序設計5.1繼承5.2多態(tài)性5.3抽象類和抽象方法5.4接口5.5內部類和匿名類325.3抽象類和抽象方法Java語言中,用abstract關鍵字來修飾一個類時,這個類叫做抽象類。一個abstract類只關心它的子類是否具有某種功能,并不關心該功能的具體實現(xiàn),功能的具體行為由子類負責實現(xiàn)的。例如:
publicabstractclassDrawing{publicabstractvoiddrawDot(intx,inty);publicvoiddrawLine(intx1,inty1,intx2,inty2){
…………
}}
用abstract來修飾一個方法時,該方法叫做抽象方法。與final類和方法相反,abstract類必須被繼承,abstract方法必須被重寫。
335.3抽象類和抽象方法
當一個類的定義完全表示抽象的概念時,它不應該被實例化為一個對象。例如Java中的Number類就是一個抽象類,它只表示數(shù)字這一抽象概念,只有當它作為整數(shù)類Integer或實數(shù)類Float等的父類時才有意義。定義一個抽象類的格式如下:
abstractclassabstractClass{
……}
由于抽象類不能被實例化,因此下面的語句會產生編譯錯誤:
newabstractClass();抽象類中可以包含抽象方法,為所有子類定義一個統(tǒng)一的接口,對抽象方法只需聲明,而不需實現(xiàn),因此它沒有方法體。其格式如下:
abstractreturnTypeabstractMethod([paramlist));
34使用abstract的另一例子abstractclassAA{abstractvoidcallme();voidmetoo(){System.out.println("InsideA'smetoo()method");}}classBBextendsAA{voidcallme(){System.out.println("InsideB'scallme()method");}}publicclassAAbstract{publicstaticvoidmain(Stringargs[]){AAcc=newBB();//cc為上轉型對象
cc.callme();cc.metoo();}}
35第5章面向對象高級程序設計5.1繼承5.2多態(tài)性5.3抽象類和抽象方法5.4接口5.5內部類和匿名類365.4接口接口定義使用接口的優(yōu)點37接口聲明使用關鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口聲明和接口體兩部分。1、接口聲明接口通過使用關鍵字interface
來聲明。完整的接口定義格式如下:[public]interfaceinterfaceName[extendslistOfSuperInterface]{……}其中public修飾符指明任意類均可以使用這個接口,缺省情況下,只有與該接口定義在同一個包中的類才可以訪問這個接口。extends子句與類聲明中的extends子句基本相同,不同的是一個接口可以有多個父接口,用逗號隔開,而一個類只能有一個父類。子接口繼承父接口中所有的常量和方法。通常接口名稱以able或ible結尾,表明接口能完成一定的行為,例如Runnable、Serializable。38接口聲明2、接口體接口體中包含常量定義和方法定義兩部分。其中常量定義部分定義的常量均具有public、static和final屬性。其格式如下:returnTypemethodName([paramlist]);接口中只能進行方法的聲明,而不提供方法的實現(xiàn),所以,方法定義沒有方法體,且用分號(;)結尾,在接口中聲明的方法具有public和abstract屬性。另外,如果在子接口中定義了和父接口同名的常量,則父接口中的常量被隱藏。例如:interfaceSummaryable{finalintMAX=50;//MAX具有public、static、final屬性voidprintone(floatx);floatsum(floatx,floaty);}上面這段程序可以以Summaryable.java來保存,也可以寫入其它Java程序中。39接口聲明3、接口的使用一個類通過使用關鍵字implements
聲明自己使用(或實現(xiàn))一個或多個接口。如果使用多個接口,用逗號隔開接口名。如
classCalculateextendsComputerimplementsSummary,Substractable{……}類Calculate使用了Summary和Substractable接口,繼承了Computer類。如果一個類使用了某個接口,那么這個類必須實現(xiàn)該接口的所有方法,即為這些方法提供方法體。需要注意的如下:1)在類中實現(xiàn)接口的方法時,方法的名字,返回類型,參數(shù)個數(shù)及類型必須與接口中的完全一致。2)接口中的方法被默認是public,所以類在實現(xiàn)接口方法時,一定要用public來修飾。3)另外,如果接口的方法的返回類型如果不是void的,那么在類中實現(xiàn)該接口方法時,方法體至少要有一個return語句。如果是void型,類體除了兩個大括號外,也可以沒有任何語句.40使用接口的優(yōu)點從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。通過接口使得處于不同層次,甚至互不相關的類可以具有相同的行為。接口其實就是方法定義和常量值的集合。它的優(yōu)點主要體現(xiàn)在下面幾個方面:(1)通過接口可以實現(xiàn)不相關類的相同行為,而不需要考慮這些類之間的層次關系。(2)通過接口可以指明多個類需要實現(xiàn)的方法。(3)通過接口可以了解對象的交互界面,而不需了解對象所對應的類。接口把方法的定義和類的層次區(qū)分開來,通過它可以在運行時動態(tài)地定位所調用的方法。同時接口中可以實現(xiàn)“多重繼承”,且一個類可以實現(xiàn)多個接口。正是這些機制使得接口提供了比多重繼承(如C++等語言)更簡單、更靈活、而且更強勁的功能。
41使用接口的例子【例5-9】
使用多重接口的例子//MultInterfaces.javainterfaceI1{abstractvoidtest(inti);}//可以去掉的interfaceI2{abstractvoidtest(Strings);}publicclassMultInterfacesimplementsI1,I2{publicvoidtest(inti){System.out.println("InMultInterfaces.I1.test");}publicvoidtest(Strings){System.out.println("InMultInterfaces.I2.test");}publicstaticvoidmain(String[]a){MultInterfacest=newMultInterfaces();t.test(42);t.test("Hello");}}42第5章面向對象高級程序設計5.1繼承5.2多態(tài)性5.3抽象類和抽象方法5.4接口5.5內部類和匿名類435.5內部類和匿名類5.5.1內部類的定義5.5.2內部類特性5.5.3匿名類445.5.1內部類的定義
簡單地說,一個類被嵌套定義于另一個類中,稱為嵌套類。在大多數(shù)情況下,嵌套類(靜態(tài)的嵌套類除外)就是內部類(innerclass)。包含內部類的類稱為外部類。與一般的類相同,內部類具有自己的成員變量和成員方法。通過建立內部類的對象,可以存取其成員變量和調用其成員方法。例如下面的例子:pubicclassGroupOne{intcount;//外部類的成員變量
publicclassStudent{//聲明內部類
Stringname;//內部類的成員變量
publicvoidoutput(){//內部類的成員方法
System.out.println(+"");
}}}455.5.1內部類的定義
實際上,Java語言規(guī)范對于內部類有如下的規(guī)定:在另一個類或者一個接口中聲明一個類。在另一個接口或者一個類中聲明一個接口。在一個方法中聲明一個類。類和接口聲明可嵌套任意深度。從上面的規(guī)定中我們可以看出,內部類的定義是非常靈活的。46內部類特性
內部類有如下特性:一般用在定義它的類或語句塊之內,在外部引用它時必須給出完整的名稱。名稱不能與包含它的類名相同??梢允褂冒耐獠款惖撵o態(tài)成員變量和實例成員變量,也可以使用它所在方法的局部變量。可以定義為abstract。可以聲明為private或protected。若被聲明為static,就變成了頂層類,不能再使用局部變量。若想在內部類中聲明任何static成員,則該內部類必須聲明為static。因此外部類與內部類的訪問原則是:在外部類中,通過一個內部類的對象引用內部類中的成員;反之,在內部類中可以直接引用它的外部類的成員,包括靜態(tài)成員、實例成員及私有成員。47【例5-10】內部類和外部類之間的訪問publicclassGroupTwo{//例5-10privateintcount;//外部類的私有成員變量
publicclassStudent{//聲明內部類
Stringname;publicStudent(Stringn1){name=n1;count++;//存取其外部類的成員變量
}publicvoidoutput(){System.out.println();}}publicvoidoutput(){//外部類的實例成員方法
Students1=newStudent("Johnson");//建立內部類對象"s1.output();//通過s1調用內部類的成員方法
System.out.println("count="+this.count);}publicstaticvoidmain(Stringargs[]){GroupTwog2=newGroupTwo();g2.output();}}48【例5-11】內部類訪問外部靜態(tài)變量publicclassGroupThree{privatestaticintcount;//靜態(tài)變量GroupThree.count統(tǒng)計班級數(shù)量
privateStringname;//實例變量GroupT表示班級名稱
publicclassStudent{privateintcount;//實例變量Student.count表示學號
privateStringname;//實例變量S表示學生姓名
publicvoidOutput(intcount){count++;//存取方法的參數(shù),局部變量
this.count++;//通過對象存取Student.countGroupThree.count++;//通過類名存取GroupThree.countGroupThree.this.count++;//通過對象名存取GroupThree.countSystem.out.println(count+""+this.count+""+GroupThree.count+""+GroupThree.this.count++);}}publicStudentaStu()//返回內部類Student的一個對象
{returnnewStudent();}publicstaticvoidmain(Stringargs[]){GroupThreeg3=newGroupThree();g3.count=10;//GroupThree.countGroupThree.Students1=g3.aStu();//在外部創(chuàng)建內部類的對象
s1.Output(5);//完整的內部類標識GroupThree.Student}}49【例5-12】靜態(tài)公用內部類publicclassGroupFour{publicstaticclassStudent{//定義靜態(tài)公用內部類
staticintcount;//靜態(tài)內部類中的靜態(tài)變量
Stringname;intnumber;//序號
publicStudent(Stringn1){//靜態(tài)內部類的構造方法
name=n1;count++;number=count;//序號自動增加
}publicvoidoutput(){System.out.println(+"number="+this.number);}}publicstaticvoidmain(Stringargs[]){GroupFour.Students1=newGroupFour.Student("A");s1.output();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- NB/T 11539-2024礦用物位傳感器通用技術要求
- 中醫(yī)醫(yī)學經(jīng)絡腧穴學課件-奇穴
- 《學前社會教育》課件
- 2025屆海南省部分學校高三上學期全真模擬(二)歷史試卷(解析版)
- 2024-2025學年浙江省臺州市十校聯(lián)考高一上學期期中考試歷史試題(解析版)
- 《物流倉儲管理》課件
- 單位管理制度集合大全員工管理篇
- 《物流管理運輸管理》課件
- 單位管理制度匯編大全員工管理
- 單位管理制度合并匯編【職工管理】
- 毛細管升高法測量液體表面張力系數(shù)
- 室內覆蓋方案設計與典型場景
- 放射性粒子植入自我評估報告
- 2023年山西云時代技術有限公司招聘筆試題庫及答案解析
- 浙大中控DCS系統(tǒng)介紹(簡潔版)
- GB/T 16288-2008塑料制品的標志
- GB/T 14486-2008塑料模塑件尺寸公差
- 北京市海淀區(qū)2022-2023學年高三期末考試歷史試題及答案
- 頂板管理實施細則
- 2022年杭州西湖文化旅游投資集團有限公司招聘筆試試題及答案解析
- 中國青年運動史PPT模板
評論
0/150
提交評論