




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο驤AVA語言程序設(shè)計(jì),信息科學(xué)與技術(shù)學(xué)院 網(wǎng)絡(luò)工程系 周文峰,2,第 4 章 面向?qū)ο缶幊?面向?qū)ο蠡靖拍?Java的類與對(duì)象 成員變量與封裝 成員方法 繼承 多態(tài) 特殊類 接口,3,第 4 章 面向?qū)ο缶幊?主要任務(wù): 理解面向?qū)ο缶幊痰幕靖拍?了解類的封裝方法 如何創(chuàng)建類和對(duì)象 了解成員變量和成員方法的特性 學(xué)習(xí)使用OOP方式進(jìn)行程序設(shè)計(jì),4,學(xué)習(xí)導(dǎo)讀,Java程序是由一個(gè)個(gè)類定義組成的,編寫Java程序的過程就是從現(xiàn)實(shí)世界中抽象出Java可實(shí)現(xiàn)的類并用合適的語句定義它們的過程,這個(gè)定義過程包括對(duì)類內(nèi)各種屬性和方法的定義,創(chuàng)建類的對(duì)象,也包括類間的各種關(guān)系和接口的定義。 方法是
2、類的主要組成部分。在一個(gè)類中,程序的作用體現(xiàn)在方法中。方法是Java語言的基本構(gòu)件。利用方法可以組成結(jié)構(gòu)良好的程序。本章介紹方法的構(gòu)成規(guī)則和設(shè)計(jì)、使用方法的基本要點(diǎn)。,5,4.1 面向?qū)ο蠡靖拍?Java是完全面向?qū)ο缶幊陶Z言。面向?qū)ο缶幊蹋∣OP)是一種全新的編程理念,如果從來沒有過OOP編程經(jīng)驗(yàn),需要從基本概念開始。 什么是對(duì)象?類又是什么?它們之間有什么關(guān)系?對(duì)象是如何通過消息和外部通訊的?,6,4.1.1 對(duì)象,在開發(fā)軟件的信息世界中,對(duì)象定義為相關(guān)數(shù)據(jù)和方法的集合。 對(duì)象是現(xiàn)實(shí)世界真實(shí)對(duì)象的抽象模型。從現(xiàn)實(shí)世界真實(shí)對(duì)象中抽象出來的對(duì)象使用數(shù)據(jù)和方法描述其現(xiàn)實(shí)世界中的狀態(tài)和行為特征,
3、一般通過變量描述其狀態(tài),通過方法實(shí)現(xiàn)其行為。 變量是一種有名稱的數(shù)據(jù)實(shí)體,而方法則是和對(duì)象相關(guān)的函數(shù)或過程。,抽象就是抽出事物的本質(zhì)特性而暫時(shí)不考慮它們的細(xì)節(jié)。,7,4.1.2 封裝,封裝的含義是把類設(shè)計(jì)成一個(gè)黑箱,使用者只能看見類中定義的公共方法,而看不到方法實(shí)現(xiàn)的細(xì)節(jié),也不能直接對(duì)類的數(shù)據(jù)進(jìn)行操作,迫使用戶通過接口去訪問數(shù)據(jù),這種封裝正是OOP設(shè)計(jì)者追求的理想境界。 相關(guān)數(shù)據(jù)和方法封裝到一個(gè)包里,為程序員帶來了兩個(gè)好處:模塊化和數(shù)據(jù)隱藏。,8,4.1.3 消息,對(duì)象的行為由方法來實(shí)現(xiàn),消息傳遞是對(duì)象之間進(jìn)行交互的主要方式。 構(gòu)成消息的三個(gè)要素是: 接收消息的對(duì)象 接收消息后進(jìn)行處理的方法
4、方法所需要的參數(shù),9,4.1.4 類,類就是對(duì)象的軟件圖紙、模板或原型,它定義了同類對(duì)象共有的變量和方法。 類和對(duì)象二者不太容易區(qū)分。一方面,由于軟件對(duì)象都是現(xiàn)實(shí)對(duì)象或抽象概念的電子模型,另一方面,經(jīng)常不加區(qū)分地將對(duì)象和類統(tǒng)稱為“對(duì)象”。 Java編程就是設(shè)計(jì)類,可以采用自定義方法或繼承方法設(shè)計(jì)一個(gè)類,然后使用它的實(shí)例對(duì)象完成具體的功能。,10,說明: (1) 所有東西都是對(duì)象。可將對(duì)象想象成一種新型變量;它保存著數(shù)據(jù),但可要求它對(duì)自身進(jìn)行操作。 (2) 程序中通過消息傳遞,各對(duì)象知道自己該做些什么。 (3) 每個(gè)對(duì)象都有自己的存儲(chǔ)空間,可容納其他對(duì)象。 (4) 每個(gè)對(duì)象都有一種類型。根據(jù)語法
5、,每個(gè)對(duì)象都是某個(gè)“類”的一個(gè)“實(shí)例”。其中,“類”(Class)是“類型”(Type)的同義詞。 (5)同一類所有對(duì)象都能接收相同的消息。,11,4.2 類 和 對(duì) 象,Java語言與其他面向?qū)ο笳Z言一樣,引入了類和對(duì)象的概念,類是用來創(chuàng)建對(duì)象的模板,它包含被創(chuàng)建對(duì)象的屬性和方法的定義。因此,要學(xué)習(xí)Java編程就必須學(xué)會(huì)怎樣去編寫類,即怎樣用Java的語法去描述一類事物共有的屬性和行為。 對(duì)象的屬性通過變量來刻畫,而對(duì)象的行為通過方法來體現(xiàn)。方法可以操作屬性形成一定的算法來實(shí)現(xiàn)一個(gè)具體的功能。類把屬性和方法封裝成一個(gè)整體。,12,4.2.1 定義類,在Java語言中,類是基本的構(gòu)成要素,是對(duì)
6、象的模板,Java程序中所有的對(duì)象都是由類創(chuàng)建的。一個(gè)Java類主要包括以下兩部分: 類的聲明 類的主體,13,類的聲明,在類聲明中,需要定義類的名稱、對(duì)該類的訪問權(quán)限、該類與其他類的關(guān)系等。類聲明的格式如下: 修飾符用于指定類的訪問權(quán)限,可選值為public、abstract和final。,修飾符 class extends 父類名 implements 接口列表 ,14,類的聲明-類名,class 類名 類名用于指定類的名稱,類名必須是合法的Java標(biāo)識(shí)符。一般情況下,要求首字母大寫。,15,類的聲明-修飾符,public(公共的) 在沒有任何修飾符的缺省情況下,類只能被同一個(gè)源程序文件或
7、同一個(gè)包中的其它類使用。 加上public修飾符后,類可以被任何包中的類使用,稱為公共類。,類的容器,分割類名空間。,16,類的聲明-修飾符,abstract(抽象的) 定義的類代表一個(gè)抽象的概念,就不能用它來實(shí)例化一個(gè)對(duì)象。 在OOP中,可能建立了一個(gè)不需要產(chǎn)生對(duì)象的類。例如,java.lang包中的Number類代表了數(shù)這個(gè)抽象概念,可以用它在程序中產(chǎn)生一個(gè)數(shù)的子類,如Interger或Float,但從Number中直接生成對(duì)象是沒有意義的。 abstract說明的類稱為抽象類,不能用它實(shí)例化一個(gè)對(duì)象,它只能被繼承。,17,類的聲明-修飾符,final(最終的) final說明的類稱為最終
8、類。一個(gè)最終類不可能有子類,也就是說它不能被繼承。為什么要把一個(gè)類說明為最終類呢?有兩點(diǎn)理由:為了提高系統(tǒng)的安全性和出于對(duì)一個(gè)完美類的偏愛。 黑客常用的一個(gè)攻擊技術(shù)是設(shè)計(jì)一個(gè)子類,然后用它替換原來的父類。子類和父類很相象,但做的事情卻大不一樣。為防止這樣的事情發(fā)生,你可以把你的類聲明為最終類,不讓黑客有機(jī)可乘。,18,類的聲明-繼承,extends(繼承)父類名 extends告訴編譯器創(chuàng)建的類是從父類繼承下來的子類,父類必須是Java系統(tǒng)類或已經(jīng)定義的類。 從父類繼承,可以提高代碼的重用性,不必從頭開始設(shè)計(jì)程序。大部分情況下應(yīng)該利用繼承的手段編程,只在沒有合適的類可以繼承時(shí)才自己設(shè)計(jì)類。,1
9、9,類的聲明-實(shí)現(xiàn),implements(實(shí)現(xiàn))接口名 implements告訴編譯器當(dāng)前類中實(shí)現(xiàn)了哪個(gè)接口定義的功能和方法。接口必須有定義,一般為系統(tǒng)類。 接口是消息傳遞的通道,通過接口,消息才能傳遞到處理方法中進(jìn)行處理。implements說明你的類可以實(shí)現(xiàn)的一個(gè)或多個(gè)接口,如果有多個(gè)接口,要用逗號(hào)分隔。,20,類 體,類聲明部分大括號(hào)中的內(nèi)容為類體。類體主要由以下兩部分構(gòu)成: (1)成員變量的定義; (2)成員方法的定義。 在程序設(shè)計(jì)過程中,編寫一個(gè)能完全描述客觀事物的類是不現(xiàn)實(shí)的。 比如,構(gòu)建一個(gè)Apple類,該類可以擁有很多很多的屬性(即成員變量),在定義該類時(shí),選取程序需要的必要屬
10、性和行為就可以了。,21,4.2.2 了解成員方法,Java中類的行為由類的成員方法來實(shí)現(xiàn)。類的成員方法由方法聲明和方法體兩部分組成。其一般格式如下:,修飾符 ( 參數(shù)列表) 方法體 ,類的方法,又稱為成員函數(shù),用來規(guī)定類屬性上的操作,實(shí)現(xiàn)類的內(nèi)部功能的機(jī)制,同時(shí)也是類與外界進(jìn)行交互的重要窗口。,22,4.2.2 了解成員方法,修飾符用于指定方法的訪問權(quán)限,可選值為public、protected和private。 方法返回值的類型用于指定該方法的返回值的類型,如果該方法沒有返回值,必須使用關(guān)鍵字void進(jìn)行標(biāo)識(shí)。方法返回值的類型可以是任何Java數(shù)據(jù)類型。,23,了解成員方法,方法名用于指定
11、成員方法的名稱,方法名必須是合法的Java標(biāo)識(shí)符。 參數(shù)列表用于指定方法中所需的參數(shù)。當(dāng)存在多個(gè)參數(shù)時(shí),各參數(shù)之間應(yīng)使用逗號(hào)分隔。方法的參數(shù)可以是任何Java數(shù)據(jù)類型。,24,了解成員方法,方法體是方法的實(shí)現(xiàn)部分,在方法體中可以完成指定的工作,可以只打印一句話,也可以省略方法體,使方法什么都不做。需要注意的是:當(dāng)省略方法體時(shí),其外面的大括號(hào)一定不能省略。 【例4-1】 實(shí)現(xiàn)兩數(shù)相加。(Count.java),25,public class Count public int add(int src,int des) int sum=src+des; return sum; public stat
12、ic void main(String args) Count count=new Count(); int apple1=30; int apple2=20; int num=count.add(apple1,apple2); System.out.println(蘋果總數(shù)是:+num+箱。); ,26,4.2.3 成員變量和局部變量,在類體中所聲明的變量稱為類的成員變量,而在方法體中聲明的變量和方法的參數(shù)則稱為局部變量。 如何聲明成員變量和局部變量,以及變量的有效范圍?,27,聲明成員變量,Java用成員變量來表示類的狀態(tài)和屬性,聲明成員變量的基本語法格式如下: 修飾符:可選參數(shù),用于指定
13、變量的被訪問權(quán)限,可選值為public、protected、private和package。 static:可選,用于指定該成員變量為靜態(tài)變量,可以直接通過類名訪問。如果省略該關(guān)鍵字,則表示該成員變量為實(shí)例變量。,修飾符 static final ;,28,聲明成員變量,final:可選,用于指定該成員變量為取值不會(huì)改變的常量。 變量類型:必選:用于指定變量的數(shù)據(jù)類型,其值可以為Java中的任何一種數(shù)據(jù)類型。 變量名:必選,用于指定成員變量的名稱,變量名必須是合法的Java標(biāo)識(shí)符。,29,1訪問控制權(quán)限,(1)public 公共變量 由public修飾的變量稱為公共變量,可被任何包中的任何類訪
14、問,只有在確認(rèn)任何外部訪問都不會(huì)帶來不良后果的情況下才將成員聲明為公共的。公共變量對(duì)任何類都是可見的,因此它沒有秘密可言,不具有數(shù)據(jù)保護(hù)功能。 (2)private私有變量 由private修飾的變量稱為私有變量,只能被聲明它的類所使用,拒絕任何外部類的訪問。私有變量是不公開的,它們得到了最好的保護(hù),這是對(duì)類進(jìn)行封裝時(shí)使用的主要方法。,30,1訪問控制權(quán)限,(3)protected 受保護(hù)變量 由protected修飾的變量稱為受保護(hù)變量,可被聲明它的類和派生的子類以及同一個(gè)包中的類訪問。 (4)package包變量 由package修飾的變量稱為包變量,在聲明時(shí)常常省略package關(guān)鍵字,
15、即沒有修飾符的成員被視為包成員。包成員可被聲明它的類和同一個(gè)包中的其它類(包括派生子類)所訪問,在其它包中的子類則不能訪問父類的包成員。,31,內(nèi)容回顧,Java語句及控制結(jié)構(gòu) 面向?qū)ο蠡靖拍睿▽?duì)象,封裝,消息,類等) 類的定義(類的聲明,類體等),修飾符 class extends 父類名 implements 接口列表 ,32,2static 靜態(tài)變量,static聲明的成員變量被視為類的成員變量,而不把它當(dāng)作實(shí)例對(duì)象的成員變量。 靜態(tài)變量是類固有的,可以直接引用,其它成員變量僅僅被聲明,生成實(shí)例對(duì)象后才存在,才可以被引用。 基于這樣的事實(shí),也把靜態(tài)變量稱為類變量,非靜態(tài)變量稱為實(shí)例變量
16、。相應(yīng)地,靜態(tài)方法稱為類方法,非靜態(tài)方法稱為實(shí)例方法。,33,例 靜態(tài)變量的使用,class StaticDemo static int x; int y; static public int getX() return x; static public void setX(int newX) x = newX; public int getY() return y; public void setY(int newY) y = newY; ,34,public class ShowDemo public static void main(String args) System.out.pri
17、ntln(靜態(tài)變量x=+StaticDemo.getX(); System.out.println(實(shí)例變量y=+StaticDemo.getY(); / 非法,編譯時(shí)將出錯(cuò) StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo();,35,a.setX(1); a.setY(2); b.setX(3); b.setY(4); System.out.println(靜態(tài)變量a.x=+a.getX(); System.out.println(實(shí)例變量a.y=+a.getY(); System.out.println(靜態(tài)變量b.
18、x=+b.getX(); System.out.println(實(shí)例變量b.y=+b.getY(); ,36,對(duì)上面的源程序進(jìn)行編譯會(huì)出現(xiàn)如圖所示結(jié)果,不能進(jìn)行運(yùn)行該程序。,37,將源程序中的出錯(cuò)語句刪除或使用解釋符/隱藏起來如: /System.out.println(“實(shí)例變量y=”+StaticDemo.getY(); / 非法,編譯時(shí)將出錯(cuò),再進(jìn)行編譯,即可執(zhí)行該程序,結(jié)果如圖所示。,38,從輸出結(jié)果中可以得出以下幾點(diǎn)結(jié)論 :,類的靜態(tài)變量可以直接引用,例如在程序中直接使用了StaticDemo.getX(),而非靜態(tài)變量則不行。類的靜態(tài)變量相當(dāng)于某些程序語言的全局變量。 靜態(tài)方法只能
19、使用靜態(tài)變量,不能使用實(shí)例變量。 類的靜態(tài)變量只有一個(gè)版本,所有實(shí)例對(duì)象引用的都是同一個(gè)版本。 對(duì)象實(shí)例化后,每個(gè)實(shí)例變量都被制作了一個(gè)副本,它們之間互不影響。,39,3final 最終變量,一旦成員變量被聲明為final,在程序運(yùn)行中將不能被改變。這樣的成員變量就是一個(gè)常量。例如: final double PI=3.14159; 該語句聲明一個(gè)常量PI,如果在后面試圖重新對(duì)它賦值,將產(chǎn)生編譯錯(cuò)誤。 另外,常量名一般用大寫字母。,40,聲明成員變量舉例,例如,在類中聲明3個(gè)成員變量。,public class Apple public String color;/聲明公共變量color pu
20、blic static int count;/聲明靜態(tài)變量count public final boolean MATURE=true;/聲明常量MATURE并賦值 public static void main(String args) System.out.println(Apple.count);/直接引用靜態(tài)變量 Apple apple=new Apple();/創(chuàng)建類的對(duì)象 System.out.println(apple.color); System.out.println(apple.MATURE); ,41,聲明局部變量,定義局部變量(成員方法中的變量)的基本語法格式同定義成員
21、變量類似,所不同的是不能使用權(quán)限修飾符和static關(guān)鍵字對(duì)局部變量進(jìn)行修飾,但可以使用final關(guān)鍵字:,final ;,42,聲明局部變量,final:可選,用于指定該局部變量為常量。 變量類型:必選,用于指定變量的數(shù)據(jù)類型,其值可以為Java中的任何一種數(shù)據(jù)類型。 變量名:必選,用于指定局部變量的名稱,變量名必須是合法的Java標(biāo)識(shí)符。,43,聲明局部變量舉例,例如,在grow()成員方法中聲明兩個(gè)局部變量。,public void grow() final boolean STATE;/聲明常量STATE int age;/聲明局部變量age ,44,變量的有效范圍,變量的有效范圍是指
22、該變量在程序代碼中的作用區(qū)域,在該區(qū)域外不能直接訪問變量。 有效范圍決定了變量的生命周期,變量的生命周期是指從聲明一個(gè)變量并分配內(nèi)存空間、使用變量,然后釋放該變量并清除所占用內(nèi)存空間的一個(gè)過程。 進(jìn)行變量聲明的位置,決定了變量的有效范圍,根據(jù)有效范圍的不同,可將變量分為以下兩種。,45,變量的有效范圍,(1)成員變量:在類中聲明,在整個(gè)類中有效。 (2)局部變量:在方法內(nèi)或方法內(nèi)的復(fù)合代碼塊( “”與“”之間的代碼)中聲明的變量。 在復(fù)合代碼塊內(nèi)聲明的變量,只在當(dāng)前復(fù)合代碼塊中有效; 在復(fù)合代碼塊外、方法內(nèi)聲明的變量在整個(gè)方法內(nèi)都有效。,46,變量的有效范圍舉例,例如下面的實(shí)例:,public
23、 class Olympics private int medal_All=800;/成員變量 public void China() int medal_CN=100;/方法的局部變量 if(medal_CN1000)/代碼塊 int gold=50;/代碼塊的局部變量 medal_CN+=50;/允許訪問 medal_All-=150;/允許訪問 ,47,4.2.4 構(gòu)造方法的概念及用途,構(gòu)造方法是一種特殊的成員方法,它的名字必須與它所在類的名字完全相同,并且沒有返回值,也不需要使用關(guān)鍵字void進(jìn)行標(biāo)識(shí)。,public class Apple public Apple() / 構(gòu)造方法
24、,48,4.2.4 構(gòu)造方法的概念及用途,構(gòu)造方法用于對(duì)類對(duì)象中的初始化工作,在創(chuàng)建一個(gè)類的新對(duì)象的同時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新對(duì)象初始化。 【例4-2】定義Apple類,在該類的構(gòu)造方法中初始化成員變量,然后在main()主方法中創(chuàng)建Apple類的實(shí)例對(duì)象并輸出所有成員變量值。,49,public class Apple int num; float price; Apple apple; public Apple() num=10; price=8.34f; public static void main(String args) Apple apple=new Apple();
25、/創(chuàng)建類對(duì)象 System.out.println(蘋果數(shù)量:+apple.num); System.out.println(蘋果單價(jià):+apple.price); System.out.println(成員變量apple=+apple.apple); ,50,4.2.4 構(gòu)造方法的概念及用途,構(gòu)造方法的名字和類的名字是相同的。當(dāng)構(gòu)造類的對(duì)象時(shí),此構(gòu)造方法被自動(dòng)啟動(dòng),實(shí)例字段賦初值,在Java中,定義和初始化是統(tǒng)一的兩者缺一不可。 構(gòu)造方法的特點(diǎn)有: 構(gòu)造方法和類具有相同的名字。 一個(gè)類可以有多個(gè)構(gòu)造函數(shù)。 構(gòu)造方法可以有0個(gè)、1個(gè)或多個(gè)參數(shù)。 構(gòu)造方法沒有返回值。 構(gòu)造方法總是和new運(yùn)算符
26、一起被調(diào)用。,51,4.2.4 構(gòu)造方法的概念及用途,說明: 如果在定義類時(shí),沒有定義構(gòu)造方法,系統(tǒng)也會(huì)提供默認(rèn)的構(gòu)造方法。 默認(rèn)的構(gòu)造方法是無參數(shù)的,但是如果你已經(jīng)在類里定義了一個(gè)或多個(gè)構(gòu)造方法,那么JAVA就不會(huì)提供默認(rèn)的構(gòu)造方法了。 如果定義的構(gòu)造方法是帶參數(shù)的,在創(chuàng)建對(duì)象時(shí),必須帶參數(shù),否則就是非法語句(除非你還定義了一個(gè)不帶參數(shù)的構(gòu)造方法)。,52,4.2.5 對(duì)象生命周期,在Java語言中,把任何事物都看做對(duì)象,例如一個(gè)人、一個(gè)動(dòng)物,或者沒有生命體的輪船、汽車、飛機(jī),甚至概念性的抽象,例如公司業(yè)績。 一個(gè)對(duì)象在Java語言中的生命周期包括3個(gè)階段: 創(chuàng)建對(duì)象 使用對(duì)象 銷毀對(duì)象,5
27、3,創(chuàng)建對(duì)象,對(duì)象是類的實(shí)例。Java定義任何變量都需要指定變量類型,因此,在創(chuàng)建對(duì)象之前,一定要先聲明該對(duì)象。聲明對(duì)象的一般格式如下: 類名:用于指定一個(gè)已經(jīng)定義的類。 對(duì)象名:用于指定對(duì)象名稱,對(duì)象名必須是合法的Java標(biāo)識(shí)符。,類名 對(duì)象名;,54,聲明對(duì)象舉例,例如聲明Apple類的一個(gè)對(duì)象redApple的代碼如下:,Apple redApple;,55,創(chuàng)建對(duì)象,在聲明對(duì)象時(shí),只是在內(nèi)存中為其建立一個(gè)引用,并置初值為null,表示不指向任何內(nèi)存空間。 聲明對(duì)象以后,需要為對(duì)象分配內(nèi)存,這個(gè)過程也稱為實(shí)例化對(duì)象。在Java中使用關(guān)鍵字new來實(shí)例化對(duì)象,具體語法格式如下:,對(duì)象名=n
28、ew 類名(構(gòu)造方法名)(參數(shù)列表);,56,創(chuàng)建對(duì)象,對(duì)象名:必選,用于指定已經(jīng)聲明的對(duì)象名。 類名:必選,用于指定構(gòu)造方法名,即類名,因?yàn)闃?gòu)造方法與類名相同。 參數(shù)列表:可選參數(shù),用于指定構(gòu)造方法的入口參數(shù)。如果構(gòu)造方法無參數(shù),則可以省略。,57,創(chuàng)建對(duì)象,在聲明Apple類的一個(gè)對(duì)象redApple后,可以通過以下代碼為對(duì)象redApple分配內(nèi)存(即創(chuàng)建該對(duì)象): 在聲明對(duì)象時(shí),也可以直接實(shí)例化該對(duì)象: 這相當(dāng)于同時(shí)執(zhí)行了對(duì)象聲明和創(chuàng)建對(duì)象:,Apple redApple=new Apple();,redApple=new Apple();,Apple redApple; redApp
29、le=new Apple();,創(chuàng)建對(duì)象以某個(gè)類為模板,這個(gè)類里定義了哪些屬性和方法,新建的對(duì)象就必然在內(nèi)存里擁有相應(yīng)的屬性和方法。 可見,相對(duì)于簡(jiǎn)單數(shù)據(jù)類型,類就是用戶自己定義的復(fù)雜的抽象數(shù)據(jù)類型:而相對(duì)于簡(jiǎn)單變量,對(duì)象就是復(fù)雜的既包括數(shù)據(jù)又包括方法代碼的復(fù)雜數(shù)據(jù)單位。,58,使用對(duì)象,創(chuàng)建對(duì)象后,就可以訪問對(duì)象的成員變量,并改變成員變量的值了,而且還可以調(diào)用對(duì)象的成員方法。通過使用運(yùn)算符“.”實(shí)現(xiàn)對(duì)成員變量的訪問和成員方法的調(diào)用。 語法格式為: 【例4-3】 定義一個(gè)類,創(chuàng)建該類的對(duì)象,同時(shí)改變對(duì)象的成員變量的值并調(diào)用該對(duì)象的成員方法。,對(duì)象.成員變量 對(duì)象.成員方法(),59,publi
30、c class Round final float PI=3.14159f; /定義一個(gè)用于表示圓周率的常量PI public float r=0.0f; public float getArea() /定義計(jì)算圓面積的方法 float area=PI*r*r;/計(jì)算圓面積并賦值給變量area return area;/返回計(jì)算后的圓面積 public float getCircumference(float r) /定義計(jì)算圓周長的方法 float circumference=2*PI*r;/計(jì)算圓周長并賦值給變量 return circumference;/返回計(jì)算后的圓周長 ,60,pu
31、blic static void main(String args) Round round=new Round();/創(chuàng)建類對(duì)象 round.r=20;/改變成員變量的值 float r=20; float area=round.getArea();/調(diào)用成員方法 System.out.println(圓的面積為:+area); float circumference=round.getCircumference(r);/調(diào)用帶參數(shù)的成員方法 System.out.println(圓的周長為:+circumference); ,61,銷毀對(duì)象,在許多程序設(shè)計(jì)語言中,需要手動(dòng)釋放對(duì)象所占用的內(nèi)
32、存,但是,在Java中則不需要手動(dòng)完成這項(xiàng)工作。Java提供的垃圾回收機(jī)制:垃圾收集器可以自動(dòng)判斷對(duì)象是否還在使用,并能夠自動(dòng)銷毀不再使用的對(duì)象,收回對(duì)象所占用的資源。 Java提供了一個(gè)名為finalize()的方法,用于在對(duì)象被垃圾回收機(jī)制銷毀之前執(zhí)行一些資源回收工作,由垃圾回收系統(tǒng)調(diào)用,可以重寫該方法。finalize()方法沒有任何參數(shù)和返回值,每個(gè)類有且只有一個(gè)finalize()方法。,62,Java程序的基本結(jié)構(gòu)如下: 引入Java類庫; 定義用戶類1 定義類1的若干變量或?qū)ο螅?定義類1的方法1; 定義類1的方法2; 定義類1的方法M1; 定義用戶類2 定義類2的若干變量或?qū)ο?/p>
33、: 定義類2的方法1; 定義類2的方法2; 定義類2的方法M2 ,63,Java編程小結(jié),源程序的文件名和程序中定義的主類名應(yīng)保持一致,包括字母大小寫的匹配。 Java嚴(yán)格區(qū)分大小寫,例如applet和Applet代表了不同的含義。 語句以分號(hào)結(jié)束。 程序中可加注釋,用雙斜杠“/”引導(dǎo),“/* */”可包含多行注釋。 注意設(shè)計(jì)一般類與主類,一般類可以有多個(gè),主類只能有一個(gè),源程序名與主類名相同。 源程序保持良好的書寫風(fēng)格,不同級(jí)別的語句采用縮進(jìn)的方法來表示它們的差異。,64,4.3 繼 承,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,繼承是不可或缺的一部分。通過繼承可以實(shí)現(xiàn)代碼的重用,提高程序的可維護(hù)性。,65,4
34、.3.1 繼承的概念,類之間的繼承關(guān)系是現(xiàn)實(shí)世界中遺傳關(guān)系的直接模擬,它表示類之間的內(nèi)在聯(lián)系以及對(duì)屬性和操作的共享,即子類可以沿用父類(被繼承類)的某些特征。當(dāng)然,子類也可以具有自己獨(dú)立的屬性和操作。 繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的最主要的特點(diǎn),是其他語言(如面向過程語言)所沒有的。,66,4.3.1 繼承的概念,繼承定義 繼承性是軟件復(fù)用的一種形式。新的類由已存在的類生成,通過保留它們的屬性和行為,并且根據(jù)新類的要求對(duì)性能加以修改,添加新的屬性和行為。 當(dāng)建立一個(gè)新類時(shí),不必寫出全部成員變量和成員方法。只要簡(jiǎn)單地聲明這個(gè)類是從一個(gè)已定義的類繼承下來的,就可以引用被繼承類的全部成員。被繼承的類
35、稱為父類或超類(superclass),這個(gè)新類稱為子類。,67,4.3.1 繼承的概念,繼承定義 如果子類只從一個(gè)父類繼承,則稱為單繼承;如果子類從一個(gè)以上父類繼承,則稱為多繼承。注意 Java不支持多重繼承,但它支持“接口”概念。接口使Java獲得了多重繼承的許多優(yōu)點(diǎn),摒棄了相應(yīng)的缺點(diǎn)。,68,4.3.2 子類的創(chuàng)建,在類的聲明中,可以通過使用關(guān)鍵字extends來顯式地指明其父類。 語法格式為: 修飾符:可選,用于指定類的訪問權(quán)限,可選值為public、abstract和final。 子類名:必選,用于指定子類的名稱,類名必須是合法的Java標(biāo)識(shí)符。一般情況下,要求首字母大寫。 exte
36、nds 父類名:必選,用于指定要定義的子類繼承于哪個(gè)父類。,修飾符 class 子類名 extends 父類名,69,子類的創(chuàng)建,例如定義一個(gè)Cattle類,該類繼承于父類Animal,即Cattle類是Animal類的子類:,abstract class Cattle extends Animal /此處省略了類體的代碼 ,子類從父類繼承有兩個(gè)主要的方面: (1)屬性的繼承。例如,公司是一個(gè)父類,一個(gè)公司有名稱、地址、經(jīng)理、雇員等,這些都屬于結(jié)構(gòu)方面。 (2)方法的繼承。一個(gè)父類定義了若干操作,如一個(gè)公司要有項(xiàng)目、利潤、任命經(jīng)理、錄用職工等操作,子公司也將繼承這些行為。,70,子類的創(chuàng)建,p
37、ublic class MyApplet extends java.applet.Applet public class MyApplication extends Frame public class MyApp1 extends Object public class MyApp2 第一條語句聲明子類MyApplet的父類是Applet,并指明Applet的層次結(jié)構(gòu); 第二條語句聲明子類MyApplication的父類是Frame; 第三條語句聲明子類MyApp1的父類是Object,但編程中通常會(huì)省略extends Object子句; 第四條語句在字面上沒有extends,但實(shí)際上等價(jià)于
38、public class MyApp2 extends Object。,71,類Object,它在java.lang中定義,是所有類的始祖。一個(gè)類可以有多個(gè)子類,也可以沒有子類,但它必定有一個(gè)父類(Object除外)。 對(duì)繼承的理解應(yīng)該擴(kuò)展到整個(gè)父類的分支,也就是說,子類繼承的成員實(shí)際上是整個(gè)父系的所有成員。例如,toString這個(gè)方法是在Object中聲明的,被層層繼承了下來,用于輸出當(dāng)前對(duì)象的基本信息。,72,4.3.3 繼承的使用原則,子類可以繼承父類中所有可被子類訪問的成員變量和成員方法,但必須遵循以下原則: (1)子類能夠繼承父類中被聲明為public和protected的成員變量
39、和成員方法,但不能繼承被聲明為private的成員變量和成員方法; (2)子類能夠繼承在同一個(gè)包中的由默認(rèn)修飾符修飾的成員變量和成員方法;,73,4.3.3 繼承的使用原則,(3)如果子類聲明了一個(gè)與父類的成員變量同名的成員變量,則子類不能繼承父類的成員變量,此時(shí)稱子類的成員變量隱藏了父類的成員變量; (4)如果子類聲明了一個(gè)與父類的成員方法同名的成員方法,則子類不能繼承父類的成員方法,此時(shí)稱子類的成員方法覆蓋了父類的成員方法。,74,繼承的使用原則,【例4-4】 定義一個(gè)動(dòng)物類Animal及它的子類Bird。 public class Animal public boolean live=t
40、rue; /定義一個(gè)成員變量 public String skin=; public void eat() /定義一個(gè)成員方法 System.out.println(動(dòng)物需要吃食物); public void move() /定義一個(gè)成員方法 System.out.println(動(dòng)物會(huì)運(yùn)動(dòng)); ,75,繼承的使用原則,【例4-4】 定義一個(gè)動(dòng)物類Animal及它的子類Bird。 public class Bird extends Animal public String skin=羽毛; public void move() System.out.println(鳥會(huì)飛翔); ,76,實(shí)驗(yàn)題
41、目:數(shù)組程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康呐c要求: 1.掌握java的數(shù)組的定義、初始化 2.掌握java數(shù)組的基本操作 3.掌握java數(shù)組的應(yīng)用 4.掌握java數(shù)組的常用方法 二、實(shí)驗(yàn)內(nèi)容 1. 2. 三、源程序 四、實(shí)驗(yàn)總結(jié),77,Java編程小結(jié),源程序的文件名和程序中定義的主類名應(yīng)保持一致,包括字母大小寫的匹配。 Java嚴(yán)格區(qū)分大小寫,例如applet和Applet代表了不同的含義。 語句以分號(hào)結(jié)束。 程序中可加注釋,用雙斜杠“/”引導(dǎo),“/* */”可包含多行注釋。 注意設(shè)計(jì)一般類與主類,一般類可以有多個(gè),主類只能有一個(gè),源程序名與主類名相同。 源程序保持良好的書寫風(fēng)格,不同級(jí)別的語句采用
42、縮進(jìn)的方法來表示它們的差異。,78,內(nèi)容回顧,類的定義(最終變量,局部變量,變量的作用范圍,構(gòu)造方法) 對(duì)象的創(chuàng)建,使用和銷毀 繼承性(作用,定義,子類的創(chuàng)建等),79,成員變量的隱藏,所謂隱藏是指子類重新定義了父類中的同名變量。 子類執(zhí)行自己的方法時(shí),操作的是子類的變量,子類執(zhí)行父類的方法時(shí),操作的是父類的變量。 在子類中要特別注意成員變量的命名,防止無意中隱藏了父類的關(guān)鍵成員變量,這有可能給你的程序帶來麻煩。,80,成員方法的覆蓋,已知通過繼承子類可以繼承父類中所有可以被子類訪問的成員方法,但如果子類的方法與父類方法同名,則不能繼承,此時(shí)稱子類的方法覆蓋了父類的那個(gè)方法,簡(jiǎn)稱為方法覆蓋。
43、方法的覆蓋(override),為子類提供了修改父類成員方法的能力。例如,子類可以修改層層繼承下來的toString方法,讓它輸出一些更有用的信息。下面的例子顯示了在子類Circle中添加toString方法,用來返回圓半徑和圓面積信息。,81,class Circle extends Point private int radius; Circle(int r) setRadius(r);/構(gòu)造方法 public void setRadius(int r) radius=r; public int getRadius() return radius; public double area()
44、 return 3.14159*radius*radius; public String toString() return 圓半徑:+getRadius()+ 圓面積:+area(); ,82,public class O1 public static void main(String args) Circle c=new Circle(10); System.out.println(n+c.toString(); 程序中添加了toString方法并修改了它的返回值。由于toString和繼承下來的方法名相同、返回值類型相同,因此就覆蓋了父類中的toString方法。而父類Point中的to
45、String方法盡管沒有顯示出來,它仍然存在,它是從Object中繼承下來的。,83,方法覆蓋時(shí)要特別注意,用來覆蓋的子類方法應(yīng)和被覆蓋的父類方法保持同名、同返回值類型,以及相同的參數(shù)個(gè)數(shù)和參數(shù)類型。 有時(shí),可能不需要完全覆蓋一個(gè)方法,可以部分覆蓋一個(gè)方法。部分覆蓋是在原方法的基礎(chǔ)上添加新的功能,即在子類的覆蓋方法中添加一條語句:super.原父類方法名,然后加入其它語句。,84,4.3.4 使用this關(guān)鍵字,當(dāng)局部變量和成員變量的名字相同時(shí),成員變量就會(huì)被隱藏,這時(shí)如果想在成員方法中使用成員變量,則必須使用關(guān)鍵字this。 語法格式為: 【例4-5】,this.成員變量名,85,publi
46、c class Fruit public String color=綠色; /定義顏色成員變量public void harvest() /定義收獲的方法 String color=紅色; /定義顏色局部變量 System.out.println(水果是:+color+的!); /此處輸出的是局部變量color System.out.println(水果已經(jīng)收獲); System.out.println(水果原來是:+this.color+的!);/此處輸出的是成員變量color public static void main(String args) Fruit obj=new Fruit(
47、);/創(chuàng)建類對(duì)象 obj.harvest(); ,86,4.3.5 使用super關(guān)鍵字,子類可以繼承父類的非私有成員變量和成員方法(不是以private關(guān)鍵字修飾的)。 但是,如果子類中聲明的成員變量與父類的成員變量同名,那么父類的成員變量將被隱藏。如果子類中聲明的成員方法與父類的成員方法同名,并且參數(shù)個(gè)數(shù)、類型和順序也相同,那么稱子類的成員方法覆蓋了父類的成員方法。 這時(shí),如果想在子類中訪問父類中被子類隱藏的成員方法或變量時(shí),就可以使用super關(guān)鍵字。,87,使用super關(guān)鍵字,super關(guān)鍵字主要有以下兩種用途。 (1)調(diào)用父類的構(gòu)造方法 (2)操作被隱藏的成員變量和被覆蓋的成員方法
48、,88,調(diào)用父類的構(gòu)造方法,子類可以調(diào)用父類的構(gòu)造方法。但是必須在子類的構(gòu)造方法中使用super關(guān)鍵字來調(diào)用。其語法格式如下: 如果父類的構(gòu)造方法中包括參數(shù),則參數(shù)列表為必選項(xiàng),用于指定父類構(gòu)造方法的入口參數(shù)。 例如下面的代碼在Animal類中添加一個(gè)帶參數(shù)的構(gòu)造方法:,super(參數(shù)列表);,public Animal() public Animal(String strSkin) skin=strSkin; ,89,調(diào)用父類的構(gòu)造方法,這時(shí),如果想在子類Bird中使用父類的帶參數(shù)的構(gòu)造方法,則需要在子類Bird的構(gòu)造方法中通過以下代碼進(jìn)行調(diào)用:,public Bird() super(羽
49、毛); ,90,關(guān)于子類構(gòu)造方法,在子類中使用構(gòu)造方法 關(guān)于子類構(gòu)造方法的規(guī)律總結(jié)如下: (1)子類構(gòu)造方法總是先調(diào)用(顯式的或隱式地) 其父類的構(gòu)造方法,以創(chuàng)建和初始化子類的父類 成員。 (2)構(gòu)造方法不能繼承,它們只屬于定義它們的類。 (3)當(dāng)創(chuàng)建一個(gè)子類對(duì)象時(shí),子類構(gòu)造方法首先調(diào)用 父類的構(gòu)造方法并執(zhí)行,接著才執(zhí)行子類構(gòu)造方法。,91,操作被隱藏的成員變量和被覆蓋的成員方法,如果想在子類中操作父類中被隱藏的成員變量和被覆蓋的成員方法,也可以使用super關(guān)鍵字。 如果想在子類Bird的方法中改變父類Animal的成員變量skin的值可以使用以下代碼: 如果想在子類Bird的方法中使用父類
50、Animal的成員方法move()可以使用以下代碼:,super.成員變量名 super.成員方法名(參數(shù)列表),super.skin=羽毛;,super.move();,92,class Person public int c; private String name; private int age; protected void setName(String name) =name; protected void setAge(int age) this.age=age; protected void print() System.out.println(Name=+n
51、ame+ Age=+age); ,93,public class DemoSuper extends Person public void print() System.out.println(DemoSuper:); super.print(); public static void main(String args) DemoSuper ds=new DemoSuper(); ds.setName(kevin); ds.setAge(22); ds.print(); ,94,4.4 多 態(tài),多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要部分,是面向?qū)ο蟮?個(gè)基本特性(封裝,繼承,多態(tài))之一。 在一個(gè)類中,可
52、以定義多個(gè)同名的方法,只要確定它們的參數(shù)個(gè)數(shù)和類型不同。這種現(xiàn)象稱為類的多態(tài)。,95,4.4 多 態(tài),多態(tài)使程序簡(jiǎn)潔,為程序員帶來很大便利。在OOP中,當(dāng)程序要實(shí)現(xiàn)多個(gè)相近的功能時(shí),就給相應(yīng)的方法起一個(gè)共同的名字,用不同的參數(shù)代表不同的功能。這樣,在使用方法時(shí)不論傳遞什么參數(shù),只要能被程序識(shí)別就可以得到確定的結(jié)果。 在Java語言中,通常使用方法的重載(Overloading)和覆蓋(Overriding)實(shí)現(xiàn)類的多態(tài)性。,96,4.4.1 方法的重載,方法的重載是指在一個(gè)類中,出現(xiàn)多個(gè)方法名相同,但參數(shù)個(gè)數(shù)或參數(shù)類型不同的方法,則稱為方法的重載。Java在執(zhí)行具有重載關(guān)系的方法時(shí),將根據(jù)調(diào)用
53、參數(shù)的個(gè)數(shù)和類型區(qū)分具體執(zhí)行的是哪個(gè)方法。 【例4-6】,97,public class Calculate final float PI=3.14159f; /定義一個(gè)用于表示圓周率的常量PI /求圓形的面積 public float getArea(float r) /定義一個(gè)用于計(jì)算面積的方法getArea() float area=PI*r*r; return area; /求矩形的面積 public float getArea(float l,float w) /重載getArea()方法 float area=l*w; return area; /畫任意形狀的圖形 public v
54、oid draw(int num)/定義一個(gè)用于畫圖的方法draw() System.out.println(畫+num+個(gè)任意形狀的圖形); ,98,/畫指定形狀的圖形 public void draw(String shape) /重載draw()方法 System.out.println(畫一個(gè)+shape); public static void main(String args) Calculate calculate=new Calculate(); /創(chuàng)建Calculate類的對(duì)象并為其分配內(nèi)存 float l=20; float w=30; float areaRectangl
55、e=calculate.getArea(l, w); System.out.println(求長為+l+ 寬為+w+的矩形的面積是:+areaRectangle); float r=7; float areaCirc=calculate.getArea(r); System.out.println(求半徑為+r+的圓的面積是:+areaCirc); int num=7; calculate.draw(num); calculate.draw(三角形); ,99,4.4.1 方法的重載,Java在執(zhí)行具有重載關(guān)系的方法時(shí),將根據(jù)調(diào)用參數(shù)的個(gè)數(shù)和類型區(qū)分具體執(zhí)行的是哪個(gè)方法。 重載的方法之間并不一
56、定必須有聯(lián)系,但是為了提高程序的可讀性,一般只重載功能相似的方法。 注意:在方法重載時(shí),方法返回值的類型不能作為區(qū)分方法重載的標(biāo)志。,100,4.4.2 方法的覆蓋,【例4-7】 public class Animal public Animal() public void cry() System.out.println(動(dòng)物發(fā)出叫聲!); public class Cat extends Animal public Cat() public void cry() System.out.println(貓發(fā)出“喵喵”聲!); ,101,4.4.2 方法的覆蓋,【例4-7】 public cl
57、ass Dog extends Animal public Dog() public void cry() System.out.println(狗發(fā)出“汪汪”聲!); public class Cattle extends Animal ,102,public class Zoo public static void main(String args) Dog dog=new Dog(); /創(chuàng)建Dog類的對(duì)象并為其分配內(nèi)存 System.out.println(“執(zhí)行dog.cry();語句時(shí)的輸出結(jié) 果:); dog.cry(); Cat cat=new Cat(); /創(chuàng)建Cat類的對(duì)
58、象并為其分配內(nèi)存 System.out.println(“執(zhí)行cat.cry();語句時(shí)的輸出結(jié) 果:); cat.cry(); Cattle cattle=new Cattle(); /創(chuàng)建Cattle類的對(duì)象 并為其分配內(nèi)存 System.out.println(“執(zhí)行cattle.cry();語句時(shí)的輸出 結(jié)果:); cattle.cry(); ,103,4.4.3 構(gòu)造方法的重載,重載構(gòu)造方法的目的: 提供多種初始化對(duì)象的能力,使程序員可以根據(jù)實(shí)際需要選用合適的構(gòu)造方法來初始化對(duì)象。,104,class RunDemo private String userName, password
59、; RunDemo() System.out.println(All is null!); RunDemo(String name) userName=name; RunDemo(String name, String pwd) this(name); password=pwd; check(); ,105,void check() String s=null; if (userName!=null) s=用戶名:+userName; else s=用戶名不能為空!; if (password!=ThisWord) s=s+ 口令無效!; else s=s+ 口令:*; System.out.println(s); ,106,public class D1 public static void main(String args) new RunD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 60332-1-2:2025 EN Tests on electric and optical fibre cables under fire conditions - Part 1-2: Test for vertical flame propagation for a single insulated wire or cable -
- 2025至2030中國電視劇行業(yè)市場(chǎng)發(fā)展分析及前景預(yù)測(cè)與戰(zhàn)略規(guī)劃報(bào)告
- 2025至2030中國電動(dòng)自行車燈行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國甲氧基乙酸甲酯行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國玉米種子市場(chǎng)投資風(fēng)險(xiǎn)與需求多樣化趨勢(shì)報(bào)告
- 2025至2030中國特氟龍膨脹密封膠行業(yè)發(fā)展趨勢(shì)分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 教育心理學(xué)與商業(yè)培訓(xùn)的有機(jī)結(jié)合
- 藥庫培訓(xùn)課件圖片模板
- 目標(biāo)選才培訓(xùn)課件
- 母嬰護(hù)理能力培訓(xùn)課件
- 【課件】跨學(xué)科實(shí)踐:為家庭電路做設(shè)計(jì)+2025-2026學(xué)年人教版物理九年級(jí)上學(xué)期
- 2025屆中考數(shù)學(xué)全真模擬卷 【河北專用】及答案
- 廣告法法律培訓(xùn)課件
- 2025至2030中國高阻隔膜市場(chǎng)供需狀況與重點(diǎn)企業(yè)經(jīng)營分析報(bào)告
- 鋼鐵超低排放改造評(píng)估報(bào)告
- 剪刀升降車安全教育培訓(xùn)
- 彩繪臉部兒童課件
- 員工帶小孩管理制度
- 衛(wèi)生法律法規(guī)典型案例解析
- 2025年目標(biāo)管理實(shí)施與評(píng)估考試試卷及答案
- 2025年交通基礎(chǔ)設(shè)施建設(shè)投融資模式創(chuàng)新與政策解讀
評(píng)論
0/150
提交評(píng)論