版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章類與對象--抽象與封裝的Java實現
提綱3.1抽象與封裝的實現技術3.2類(屬性成員、方法成員,構造方法)3.3對象3.4訪問屬性控制3.5靜態(tài)成員3.6final、this和null修飾符態(tài)成員3.7對象拷貝3.8應用舉例3.1抽象與封裝的實現技術
實現抽象和封裝——類和對象一個對象是的關注領域世界中特定實體在程序中的具體體現,它包含了若干個成員變量和成員方法。成員變量反映實體的屬性狀態(tài),成員方法反映實體具有的行為能力,這些成員的規(guī)格描述將由類承擔,類是對具有類似特征的對象的抽象說明,對象是類的實例。對象體的構成………………繪制直線獲取屬性值設置屬性值成員方法(對象/類“線”的描述)示例:線classclassLine{//屬性集PointstartPoint,endPoint;//起點和終點ColorfrontColor;intwidth;//畫線的寬度LineStylelineStyle;//線的類型,虛線、雙線…//方法集voiddraw(Graphicsg);//在圖形設備g上畫出此線doublelength();//獲得此線的長度voidsetStartPoint(Pointp);PointgetStartPoint();…}3.2類
3.2.1類的定義
Java語言中,類主要有兩個來源途徑Java類庫
用戶自定義的類Object類是所有的類的超類。如果在自定義類時,沒有寫明父類,則默認的父類為Object。從嚴格意義上講,Java程序中定義的所有類都是子類。最簡單的類定義格式為
classClassName{ ClassBody//類體}
class為關鍵字,ClassName為定義的類名稱ClassBody為類體,可包含成員變量、成員方法、內部類、內部接口、構造方法、靜態(tài)初始化器
類的UML表示一個類的UML圖形表示如圖
一個Box類的UML表示
BOX類的UML表示Box類的定義
publicclassBox{intlength,width,height;voidsetLong(intlength
Value){length=lengthValue;}voidsetWidth(intwidthValue){width=widthValue;}voidsetHeight(intheightValue){height=heightValue;}voidsetBox(intlengthValue,intwidthValue,intheightValue){length=lengthValue;width=widthValue;height=heightValue;}intgetLength(){returnlength;}intgetWidth(){returnwidth;}intgetHeight(){returnheight;}}類的嵌套定義(避免使用)classOutClass{//頂層類
intconut;classInClass{//內部類
voidprintConut(){ System.out.println("conut:"+(++conut));}}voidcreateInObject(){InClassin=newInClass();//引用內部類
in.printConut();}}類的嵌套定義(避免使用)publicclassTestInClass//用于測試內部類應用的類{publicstaticvoidmain(String[]args){OutClassoutObj=newOutClass();//創(chuàng)建外部類對象
outObj.createInObject();//調用創(chuàng)建內部類的成員方法
OutClass.InClassinObj=outObj.newInClass();//在外部創(chuàng)建內部類對象
inObj.printConut();}}
運行結果:conut:1conut:2
JAVA類的存儲有兩種存儲方式:多個類定義存放在一個文件中,(但每個.java文件中只可有一個public類,且文件名與pubilc類名同名)
每個類定義分別存放在不同的文件中不管源代碼如何存放,編譯后每一個類都將生成一個字節(jié)碼文件,且文件名的前綴為類名,后綴為.class
含有屬于另外一個類的成員變量的典型例子
classDate{intyear,month,day;//描述年、月、日的三個成員變量
voidsetYear(inty){ year=y; }voidsetMonth(intm){ month=m;}voidsetDay(intd){ day=d;}voidsetDate(inty,intm,intd){year=y;month=m;day=d;}intgetYear(){returnyear;}intgetMonth(){returnmonth;}intgetDay(){returnday;}}Book類定義classBook//書籍類{Stringname;Stringauthor;DatepublishDate;floatprice;……//其他一些成員變量
……//成員方法}
Date是描述日期的類,Book是描述書籍的類。在Book類中,設一個表示出版日期的成員變量,它屬于Date類。
Book類與Date類關系可以將這兩個類看成具有“整體-部分”的關系。即Book類是由Date類對象和一些其他類型的成員變量組合而成的,它們共同地反映了書籍信息。下面是這種關系的UML圖形符號:
publishDate類中的成員在類中定義的成員時,根據所承擔的作用分為:變量/數據成員方法/操作成員在以上基礎上,變量和方法根據內存分配情況又分為兩類:實例成員:類創(chuàng)建實例后,每個實例擁有一份,不同實例之間互不干擾。訪問它們時,必須通過實例/對象名訪問類成員:每個類只有唯一一份,被類的各個成員共享。訪問它們時,可根據實例/對象名訪問,也可直接通過類名訪問。定義時,加上關鍵字:static因此,類中成員共分為四類:實例變量,實例方法類變量,類方法3.2.2成員變量的定義與初始化
實例變量的定義格式:ModifiersDataTypeMemberName;Modifiers:修飾符,決定成員變量的存儲方式和訪問權限DataType:
成員變量的類型MemberName:是成員變量的名稱如:classBook{//書籍類
publicStringname;
protectedStringauthor;
privateDatepublishDate;floatprice;……//其他一些成員變量
……//成員方法}
初始化實例變量主要有5個途徑每個數據數據類型有默認的初始值可以在定義的同時賦予相應的初值在一個成員方法中,為每個實例變量賦值在類的構造方法中實現初始化實例變量
利用初始化塊對成員變量進行初始化
初始化塊、構造方法初始化成員變量
classPoint{intx,y;
{//初始化塊,無名代碼塊
x=10;y=20;System.out.println("Pointinitializationblock");}Point(){};//無參數的構造方法
Point(intdx,intdy)//帶兩個參數的構造方法
{x=dx;y=dy;//System.out.println("Pointconstructmethod");}}
3.2.3成員方法的定義
成員方法主要承擔外部操作對象屬性的任務,如:Setters方法:對類中的每個成員變量賦值,Getters方法:獲取每個成員變量的當前值,實現類/對象的其它功能的成員方法,如一般類的toString(),矩形類的area()方法。實例方法
定義格式為:
ModifiersResultTypeMethodName(parameterList)[throwsexceptions]{MethodBody}Modifiers:修飾符
(public/protected/private)ResultType:方法返回類型(void/String/int/…)MethodName:方法名稱parameterList:參數列表
throwsexceptions:列出方法能夠拋出的異常種類
時間類Time的定義publicclassTime//時間類{inthour,minute,second;//時、分、秒
voidsetTime(inth,intm,ints)//設置時間
{hour=(h<0)?0:h%24;minute=(m<0)?0:m%60;second=(s<0)?0:s%60;}intgetHour(){returnhour;}//返回時
intgetMinute(){returnminute;}//返回分
intgetSecond(){returnsecond;}//返回秒}
成員方法中處理的數據主要來源途徑
傳遞給成員方法的參數類中的成員變量,包括實例變量和類變量在方法體內定義的局部變量在方法中調用其他成員方法所得到的返回值3.2.4成員方法的重載
重載——
在一個類中,同一個名稱的成員方法可以被定義多次的現象。一個成員方法重載的例子
在Time類,我們又增加了一個設置時間的成員方法,但這個成員方法的參數屬于String類,時間將以“12:04:35”的格式傳遞給該成員方法。classTime{inthour,minute,second;voidsetTime(inth,intm,ints)//參數為三個int變量
{hour=(h<0)?0:h%24;minute=(m<0)?0:m%60;second=(s<0)?0:s%60;}//參數為一個String類對象,如14:25:35voidsetTime(Stringtime)
{hour=Integer.parseInt(time.substring(0,2));hour=hour<0?0:hour%24;minute=Integer.parseInt(time.substring(3,5));minute=minute<0?0:minute%60;second=Integer.parseInt(time.substring(6,8));second=second<0?0:second%60;}intgetHour(){returnhour;}intgetMinute(){returnminute;}intgetSecond(){returnsecond;}}//endofclassTimepublicclassTestTime//測試類{ publicstaticvoidmain(Stringargs[]) { Timet=newTime();//創(chuàng)建Time對象
t.setTime("13:04:20");//調用參數為String的setTime()方法
System.out.println(t.getHour()+":"+t.getMinute()+":"+t.getSecond()); t.setTime(20,30,38);//調用參數為三個int的setTime()方法
System.out.println(t.getHour()+":"+t.getMinute()+":"+t.getSecond()) }}
將上面這兩個類定義存儲在一個文件名為TestTime.java中。經過編譯生成Time.class和TestTime.class
運行的結果為:
13:4:2020:30:383.2.5構造方法構造方法——
在構造類對象時使用的一種特殊的成員方法,其主要作用是初始化成員變量。
構造方法的定義格式為:
[public]ClassName(parameterList)public:控制訪問權限的修飾符ClassName:類名稱parameterList:參數表
簡單的例子classPoint{intx,y,;Point(intdx,intdy){x=dx;y=dy;}……//其他的成員方法}
構造方法Point(intdx,intdy)僅對兩個成員變量x和y賦予了初值。在利用new運算符創(chuàng)建Point類對象時,系統(tǒng)會自動地調用這個構造方法,實現對實例變量初始化,而不需要用戶顯式地調用它。構造方法的重載publicclassTime{inthour,minute,second;//用時、分、秒三個屬性描述時間
Time(inth,int,m,ints){……}//含有三個int類型參數的構造方法
Time(longtime){……}//含有一個long類型參數的構造方法
Time(Stringtime){……}//含有一個String類參數的構造方法
voidsetTime(inth,intm,ints){……}intgetHour(){……}intgetMinute(){……}intgetSecond(){……}}
在這個類中,有三個構造方法,它們的參數表均不相同。這樣,就可以用三種不同形式的參數創(chuàng)建并初始化對象。
默認構造方法
如果在定義類的時候,沒有定義任何構造方法,系統(tǒng)將提供一個參數表為空的默認構造方法。在這個默認的構造方法的方法體中,只有一個調用父類無參數構造方法的語句super()。例如:publicclassPoint{intx,y;……;//其他的成員方法}等價于publicclassPoint{intx,y;publicPoint(){super();}……;//其他的成員方法}3.3對象
類(對象)是對現實世界中實體進行抽象的結果,現實世界中的任何實體都可以映射成對象。解決問題的過程就是對對象分析、處理的過程。程序是由有限個類(對象)構成的,對象是程序操作的基本單位。所謂程序運行,就是對象之間不斷地發(fā)送消息及響應消息的過程。
3.3.1對象的創(chuàng)建兩步:聲明對象變量,創(chuàng)建對象實例。聲明對象的語法格式為:
ClassNameobjectName[,objectName];例如:
DatedateObject;TimetimeObject1,timeObject2;new運算符創(chuàng)建對象的格式為:
newClassName(parameterList)
ClassName:對象所屬的類名稱parameterList:創(chuàng)建對象時提供的參數new運算符主要完成的操作:為對象分配存儲空間根據提供的參數格式調用與之匹配的構造方法例如:dateObject=newDate(2003,5,23,10,34,56)3.3.2對象成員的使用對象創(chuàng)建后,就可以在對象之間相互發(fā)送及響應消息,以便驅動程序的運作。發(fā)送消息就是對象發(fā)出調用自身或其他類對象的成員方法的命令,響應消息就是對象具體地執(zhí)行上述的調用命令。
在對對象操作時,可能會引用成員變量或調用成員方法。下面是引用成員變量和調用成員方法的語法格式。objectName.memberVariableNameobjectName.memberMethodName(parameterList)
調用對象成員方法實際上就是向該對象發(fā)送請求操作的消息例3.3.1對象作為數組元素
classScoreClass//成績類{intNo;//學號
intscore;//成績
ScoreClass()//無參數的構造方法
{No=1000;score=0;}ScoreClass(intn,ints)//有兩個參數的構造方法
{No=n;score=s;}
voidsetInfo(intn,ints)//設置成績
{No=n;score=s;}intgetNo(){returnNo;}//獲取學號
intgetScore(){returnScore;}//獲取成績}
publicclassScoreTest//測試類{ publicstaticvoidmain(String[]args){ ScoreClass[]student=newScoreClass[10];//聲明并創(chuàng)建一維數組
for(inti=0;i<10;i++){ student[i]=newScoreClass( 1000+i,(int)(Math.random()*100) );//創(chuàng)建對象
} for(inti=0;i<10;i++){ System.out.println(student[i].getNo()+"\t"+student[i].getScore()); } }}
應用對象數組元素,需要經過下面幾個操作步驟:聲明對象數組 用new創(chuàng)建數組。此時,每個數組元素為null引用。 再用循環(huán)結構,為每個數組元素創(chuàng)建對象。 通過引用成員變量或調用成員方法對數組中每個對象進行操作。例3.3.2類中的成員變量為對象
classPoint{//點坐標
intx,y;//x、y坐標
Point(){x=0;y=0;} Point(intdx,intdy){x=dx;y=dy;} voidsetXY(intdx,intdy){x=dx;y=dy;}//設置x、y intgetX(){returnx;}//返回x intgetY(){returny;}//返回y publicStringtoString(){//將坐標信息轉換成String形式
return"("+x+","+y+")";}}
classRect{//矩形類 PointleftTop,rightBottom;//矩形左上角坐標,右下角坐標
Rect(){ leftTop=newPoint(); rightBottom=newPoint(); }Rect(intx1,inty1,intx2,inty2){ leftTop=newPoint(x1,y1); rightBottom=newPoint(x2,y2); }
Rect(Pointlefttop,Pointrightbottom){ this.leftTop=lefttop; this.rightBottom=rightbottom;}doublegetArea(){returnMath.abs((leftTop.getX-rightbottom.getX)*(leftTop.getY-rightbottom.getY));}doublegetPerimeter
(){returnMath.abs((leftTop.getX-rightbottom.getX)+(leftTop.getY-rightbottom.getY))*2;}PointgetLeftTop(){returnleftTop;}//返回左上角坐標PointgetRightBottom(){returnrightBottom;}//返回右下角坐標publicStringtoString(){//將矩形信息轉換成String形式
returnleftTop.toString()+rightBottom.toString();}}
//endofclassRectpublicclassRectTest{//測試類
publicstaticvoidmain(String[]args){
Rectr1,r2,r3; Pointp1,p2; r1=newRect(10,20,30,40); p1=newPoint(); p2=newPoint(100,100); r2=newRect(p1,p2); System.out.println("r1:"+r1); System.out.println(“r1周長:”+r1.getPerimeter()+“,r1面積:"+r1.getArea()); System.out.println("r2is:"+r2.toString()); System.out.println(“r2周長:”+r2.getPerimeter()+“,r2面積:"+r2.getArea()); }}運行這個程序后,應該得到結果:r1:(10,20)(30,40)r1周長:80.0,r1面積:400.0r2:(0,0)(100,100)r2周長:400.0,r1面積:10000.0通過這個例子,可以看出,對于含有成員對象的類,首先要創(chuàng)建每個成員對象,然后才能對其進行操作。建議最好將它們放置在構造方法中實現。3.3.3對象的清除創(chuàng)建對象的主要任務是為對象分配存儲空間,而清除對象的主要任務是回收存儲空間。Java語言提供了“自動回收垃圾”的機制。系統(tǒng)會周期地監(jiān)控對象是否還被使用,將不再被使用的對象自動地回收其所占用存儲空間。
3.4訪問屬性控制類、接口,它們的成員變量、成員方法都存在是否可以被他人訪問的訪問屬性。訪問屬性標識可訪問性。可訪問性是在編譯時確定的靜態(tài)特性。訪問屬性機制實現數據隱藏,限制用戶對不同包和類的訪問權限。
4種訪問屬性
默認訪問屬性public(公有)訪問屬性private(私有)訪問屬性protected(保護)訪問屬性
為類、接口、成員變量和成員方法指定訪問屬性的格式為:[public|private|protected]ClassName;[public|private|protected]memberVariableName;[public|private|protected]memberMethodName(parameterList);
由于除默認訪問屬性外,指定其他三種訪問屬性需要寫在定義之前,所以,又將它們稱為修飾符。3.4.1默認訪問屬性如果沒有指定訪問修飾符,它們的訪問屬性就為默認訪問屬性。具有默認訪問屬性的類、成員變量和成員方法,只能被本類和同一個包中的其他類、接口及成員方法引用。
3.4.2public訪問屬性擁有public訪問屬性的類、接口、成員變量、成員方法可以被本類和其他任何類及成員方法引用。它們既可以位于同一個包中,也可以位于不同包中。例3.4.1不同包之間的類訪問
下面定義的三個類Point、Line和Test分別放在兩個不同的包中。其定義如下:packagePointPackage;//將Point和Line類放入PointPackage包publicclassPoint{publicintx,y;publicvoidmove(intdx,intdy){x+=dx;y+=dy;}//其他的成員方法
……;}classLine{Pointstart,end;Line(){start=newPoint();end=newPoint();}publicsetLine(Pointp1,Pointp2){......}//其他的成員方法
……;}將Point和Line類定義保存為Point.java文件。packagePointsUser;//將Test類放入PointsUser包importPointPackage.*;//加載PointPackage包中的Point和Line類publicclassTest{publicstaticvoidmain(String[]args){Pointp1=newPoint();Pointp2=newPoint(20,30);System.out.println(p.x+""+p.y);Lineline1=newLine(p1,p2);//!!!語法錯誤,找不到類Line}}將這個類定義保存為Test.java文件。3.4.3private訪問屬性數據隱藏是面向對象的程序設計倡導的設計思想。將數據與其操作封裝在一起,并將數據的組織隱藏起來利用成員方法作為對外的操作接口,這樣不但可以提高程序的安全性、可靠性,還有益于日后的維護、擴展和重用。將類定義中的數據成員設置為private訪問屬性是實現數據隱藏機制的最佳方式。private訪問(私有)屬性可以應用于類中的成員,包括成員變量、成員方法和內部類或內部接口。私有成員只能被本類中的方法直接引用。3.4.4protected訪問屬性
具有protected訪問屬性的類成員可以被本類、本包和其他包中的子類訪問。它的可訪問性介于默認和public之間。如果你希望只對本包之外的子類開放,就應該將其指定為protected訪問屬性。
歸納上述4種不同的訪問屬性,可以將各種訪問屬性的可訪問權限總結在表中:同一個類同一個包不同包中的子類不同包中的非子類private*默認**protected***public****3.5靜態(tài)成員3.5.1類變量的定義及初始化在類中定義成員變量時,如果在訪問屬性修飾符之后,加上static修飾符,它們就屬于靜態(tài)成員。例如:publicstaticintstaticMember;
靜態(tài)成員變量只在加載類時創(chuàng)建一個副本,不管未來創(chuàng)建多少個這個類的對象,都將共享這一個副本。類變量的引用類變量在類被加載后立即創(chuàng)建,所以即使在該類沒有創(chuàng)建一個對象的時候,類變量也已經存在。兩種引用方式:未創(chuàng)建對象時,用類名作為前綴引用類變量如果存在該類的對象,則既可以通過類名引用類變量,也可以通過對象名引用類變量。類變量不能在構造方法中初始化。構造方法只有在創(chuàng)建對象時才被調用,而類變量在沒有創(chuàng)建對象之前就已經存在,并可以被引用;每創(chuàng)建一個對象,構造方法就要被調用一次,而類變量應該只被初始化一次。
類變量舉例publicclassPerson{publicstaticfinalintFEMALE=0;publicstaticfinalintMALE=1;publicstaticintMIN_AGE=0;publicstaticintMAX_AGE=200;Stringname;intage;intsex;…Person(Stringnm,intsx,intag){name=nm;sex=sx;age=ag;}}publicclassTestPerson1{publicstaticvoidmain(String[]args){Personp1=newPerson(“劉翔”,Person.MALE,25);Personp2=newPerson(“吳儀”,Person.FEMALE,55);
Person.MIN_AGE=20;Person.MAX_AGE=200;p1.MAX_AGE=150;System.out.println(p1.MIN_AGE);//1??System.out.println(p2.MAX_AGE);//2??System.out.println(Person.MIN_AGE);//3??System.out.println(Person.MAX_AGE);//4??}//endofmain()}//~類變量舉例(續(xù))publicclassTestPerson{publicstaticvoidmain(String[]args){Person[]ps=newPerson[2];ps[0]=newPerson(“劉翔”,Person.MALE,25);ps[1]=newPerson(“吳儀”,Person.FEMALE,55);for(inti=0;i<ps.length;i++){Stringsc=(ps[i].sex==ps[i].MALE)?“男”:“女”;//用中文的性別
System.out.println(“\n姓名:”+ps[i].name+”\n性別:”+sc+”\n年齡:”+ps[i].age);}//endoffor}//endofmain()}//~類變量的初始化器
又稱為靜態(tài)變量初始化器來實現初始化。類變量初始化器應該位于類定義中,其語法格式為:
static{......//類變量初始化}
構造方法與類變量初始化器(1)構造方法用來初始化對象的實例變量類變量初始化器用來初始化類變量;(2)構造方法在創(chuàng)建對象,即執(zhí)行new運算時由系統(tǒng)自動地調用類變量初始化器是在加載類時被自動地執(zhí)行;(3)構造方法是一種特殊的成員方法,類變量初始化器不是方法。3.5.2類方法類方法也屬于類。在類方法中,只能對該方法中的局部變量或類變量進行操作,而不能引用實例變量或調用實例方法。如果希望將一個成員方法定義成類方法,就在訪問屬性修飾符之后,加上static修飾符即可。例如:
publicstaticintgetMember(){returnstaticMember;}
3.6final、this和null修飾符finalfinal修飾某個方法:意味著這個方法不能被覆蓋final修飾成員變量:意味著這個成員變量在第一次被賦值后,不得被二次賦值final修飾局部變量:在第一次被賦值后,也只能被引用,不能被二次賦值。final修飾某個類:意味著這個類不能再作為父類派生其他的子類thisthis是對象自身的引用型系統(tǒng)變量。當在實例方法中引用本類的實例成員時,編譯器會默認地在實例成員前加上this作為前綴。例如構造方法Employee(Stringn,doubles)這樣編寫publicEmployee(Stringn,doubles){name=n;salary=s;id=nextId;}this
但實際上,編譯器會將它改為:publicEmployee(Stringn,doubles){=n;this.salary=s;this.id=nextId;}通常情況下,對實例成員的引用,編譯器都會自動地幫助你加上this前綴。
若類的構造方法中的參數與類的實例變量命名為相同的名稱,在成員方法中引用的變量名為局部變量,若想引用實例變量就需要顯式地加上this。nullnull是一個直接量,表示引用型變量為空的狀態(tài),通常用來作為引用型變量的初始值。例如:Employeee=null
當希望一個對象型變量放棄它引用的對象時,也可以使用null實現。例如:
Employeee=newEmployee(“Wang”,2000.0);
若讓e放棄它引用的對象,可以寫成
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 20717-2024道路車輛牽引車和掛車之間的電連接器(15芯)24 V15芯型
- 二零二五版信息技術專業(yè)大學生實習項目合同協議3篇
- 二零二五年頂名購置住宅合作協議3篇
- 二零二五年社區(qū)停車場車位買賣及租賃合同
- 2024物業(yè)管理公司安全文化建設與實施合同3篇
- 二零二五年度公司并購項目股權交割與整合合同3篇
- 2024年簡化版汽車租賃協議樣式版
- 專業(yè)勞務合作協議2024年通行版版B版
- 二零二五版電視互動節(jié)目主持人聘任協議3篇
- 2024港口物流作業(yè)合同
- 商業(yè)倫理與企業(yè)社會責任(山東財經大學)智慧樹知到期末考試答案章節(jié)答案2024年山東財經大學
- 【奧運會獎牌榜預測建模實證探析12000字(論文)】
- 人傷理賠專業(yè)試卷
- 主要負責人重大隱患帶隊檢查表
- 魯濱遜漂流記人物形象分析
- 新版心理傾聽師資格考試備考題庫(精簡250題)
- 暫態(tài)地電壓局部放電檢測技術課件
- 220kV變壓器監(jiān)造細則
- 8 泵站設備安裝工程單元工程質量驗收評定表及填表說明
- 企業(yè)年會盛典元旦頒獎晚會通用PPT模板
- 污水管道工程監(jiān)理控制要點
評論
0/150
提交評論