




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 Java面向?qū)ο蟪绦蛟O(shè)計(jì),面向?qū)ο蟾攀?3.1,類(lèi)與對(duì)象,3.2,成員變量和成員方法,3.3,繼承與多態(tài),3.4,包、接口與內(nèi)部類(lèi),3.5,萬(wàn)物皆對(duì)象,世界是由什么組成的?,身邊的對(duì)象,布蘭尼,朱麗葉,顧客 姓名:朱麗葉 年齡:28 體重:52千克 操作: 購(gòu)買(mǎi)商品,姓名:布蘭尼 職銜:收銀員 年齡:35 體重:60千克 操作: 收款 打印賬單,對(duì)象的特征屬性,屬性對(duì)象具有的各種特征 每個(gè)對(duì)象的每個(gè)屬性都擁有特定值 例如:布蘭尼和朱麗葉的體重不一樣,60kg,布蘭尼,屬性,35歲,對(duì)象的特征方法,方法對(duì)象執(zhí)行的操作,打單,收銀,方法,刷卡,對(duì)象的屬性和方法,列出尼古拉斯凱奇駕駛的這輛法
2、拉利F360 Spider的屬性和方法 列出小狗對(duì)象的屬性和方法,屬性: 品牌:法拉利 型號(hào):F360 Spider 顏色:黃色 價(jià)格:380萬(wàn)元 方法: 發(fā)動(dòng) 停止 加速,屬性: 顏色:白色 方法: 叫 跑 吃,小結(jié)1,說(shuō)一說(shuō)教室里的對(duì)象 描述他們的屬性和方法,顏色:黑色 品牌:BENQ 投影,姓名:張三 年齡:20 學(xué)習(xí),類(lèi)型:白熾燈 開(kāi) 關(guān) 變亮 變暗,材制: 木質(zhì) 支撐物品,封裝,對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性 對(duì)象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性, 二者相輔相承,不能分割,誰(shuí)看見(jiàn)過(guò)只有“完好的零件和顏色”而不能開(kāi)動(dòng)的汽車(chē)?,從對(duì)象抽象出“類(lèi)”,抽取出下列對(duì)象的屬性和方
3、法的共同特征,轎車(chē),顧客,類(lèi),顧客類(lèi) 轎車(chē)類(lèi) ,類(lèi)是模子,確定對(duì)象將會(huì)擁有的特征(屬性)和行為(方法),類(lèi)是對(duì)象的類(lèi)型 不同于int類(lèi)型:具有方法,各種口味的球狀冰淇淋,球狀冰淇淋模子,小結(jié)2,類(lèi)和對(duì)象有什么區(qū)別呢? 類(lèi)是抽象的概念,僅僅是模板,比如說(shuō):“人” 對(duì)象是一個(gè)你能夠看得到、摸得著的具體實(shí)體,比如:“小布什”,小布什,普京,克林頓,Java 是面向?qū)ο蟮恼Z(yǔ)言,所有Java程序都以類(lèi)class為組織單元 關(guān)鍵字class定義自定義的數(shù)據(jù)類(lèi)型,public class Hello public static void main(String args) System.out.printl
4、n(使用Java語(yǔ)言理解程序邏輯); ,Java類(lèi)模板,類(lèi)將現(xiàn)實(shí)世界中的概念模擬到計(jì)算機(jī)程序中,public class 類(lèi)名 /定義屬性部分 屬性1的類(lèi)型 屬性1; 屬性2的類(lèi)型 屬性2; 屬性n的類(lèi)型 屬性n; /定義方法部分 方法1; 方法2; 方法m; ,定義類(lèi),定義一個(gè)類(lèi)的步驟 1、定義類(lèi)名 2、編寫(xiě)類(lèi)的屬性 3、編寫(xiě)類(lèi)的方法,類(lèi)示例2-1,用類(lèi)的思想輸出計(jì)算機(jī)培訓(xùn)中心信息,類(lèi)示例2-2,public class AccpSchool /定義培訓(xùn)中心的屬性 String schoolName; / 中心的全稱(chēng) int classNum; /教室的數(shù)目 int labNum; /機(jī)房的
5、數(shù)目 / 定義培訓(xùn)中心的方法 public String toString() return schoolName + 培訓(xùn)ACCP學(xué)員 + n + 配備:+ classNum + 教 + labNum + 機(jī); ,定義類(lèi)的toString()方法, 用于輸出類(lèi)相關(guān)的信息,public String toString() return 字符串; /方法體 ,成員變量,常見(jiàn)錯(cuò)誤,public class .Book String bookName; String authorName; int pageNum; boolean isAvailable; ,類(lèi)命名規(guī)則: 1、不能使用Java關(guān)鍵字
6、 2、首字母可以為字母,也可以是“_”或“$ ”(建議不要這樣) 3、不能包含空格或“.”號(hào),代碼錯(cuò)誤,如何創(chuàng)建和使用對(duì)象,使用對(duì)象的步驟: 使用new創(chuàng)建類(lèi)的一個(gè)對(duì)象 使用對(duì)象:使用“.”進(jìn)行以下操作 給類(lèi)的屬性賦值:對(duì)象名.屬性 調(diào)用類(lèi)的方法:對(duì)象名.方法名(),AccpSchool center = new AccpSchool();,center.schoolName = 北京中心; /給屬性賦值 center.toString(); /調(diào)用類(lèi)的方法,該方法中的操作將被執(zhí)行,public class InitialAccpSchool public static void main(S
7、tring args) AccpSchool center = new AccpSchool(); System.out.println(center); center.schoolName = 北京中心; center.classNum = 10; center.labNum = 10; System.out.println(center); ,創(chuàng)建和使用對(duì)象示例,創(chuàng)建“北京中心”對(duì)象,說(shuō)一說(shuō)看到什么效果?,調(diào)用類(lèi)的toString()方法是特例:這里使用center.toString()和center作用相同 更簡(jiǎn)便,綜合案例,編寫(xiě)學(xué)生類(lèi),輸出學(xué)生相關(guān)信息 編寫(xiě)教員類(lèi),輸出教員相關(guān)信息,小
8、結(jié)3,編寫(xiě)一個(gè)手機(jī)類(lèi),并編寫(xiě)測(cè)試類(lèi)顯示手機(jī)信息,為什么需要封裝 2-1,編寫(xiě)一個(gè)類(lèi),代表教員,要求: 具有屬性:姓名、年齡 具有行為:自我介紹 教師的最小年齡要求:22歲,public class Teacher1 public String name; / 教員姓名 public int age; /年齡 /* * 返回自我介紹的內(nèi)容 */ public String introduction() return 大家好!我是 + name + ,我今年+ age+歲; ,為什么需要封裝 2-2,編寫(xiě)一個(gè)測(cè)試類(lèi),要求: 實(shí)例化一個(gè)教員對(duì)象,并對(duì)其初始化 在控制臺(tái)輸出該教員的自我介紹,publi
9、c class Teacher1Test public static void main(String args) Teacher1 teacher = new Teacher1(); = 李芳; teacher.age =10; System.out.println(roduction(); ,要滿(mǎn)足教員的最小年齡要求,可以通過(guò)對(duì)屬性的封裝來(lái)實(shí)現(xiàn),什么是封裝,public class Teacher2 private String name; / 教員姓名 / 返回教員姓名 public String getName() return name
10、; / 設(shè)定教員姓名 public void setName(String name) = name; ,封裝,就是隱藏實(shí)現(xiàn)細(xì)節(jié) 將屬性私有化,提供公有方法訪問(wèn)私有屬性 通過(guò)這些公有方法訪問(wèn)私有屬性,Teacher2 teacher = new Teacher2(); teacher.setName (李芳); String tName = teacher.getName();,通過(guò)setter、getter方法訪問(wèn)name屬性,this代表當(dāng)前類(lèi)的實(shí)例,如何實(shí)現(xiàn)封裝2-1,封裝的實(shí)現(xiàn): 1、修改屬性的可見(jiàn)性來(lái)限制對(duì)屬性的訪問(wèn) 2、為每個(gè)屬性創(chuàng)建一對(duì)賦值(setter)方法
11、和取值(getter) 方法,用于對(duì)這些屬性的訪問(wèn) 3、在setter和getter方法中,加入對(duì)屬性的存取限制,public class Teacher3 private String name; / 教員姓名 private int age; /年齡 public int getAge() return age; public void setAge(int age) if (age22) System.out.println(錯(cuò)誤!最小年齡應(yīng)為22歲!); this.age = 22; /如果不符合年齡要求,則賦予默認(rèn)值 else this.age = age; /此處省略對(duì)name屬性
12、的setter、getter方法 ,1,2,3,如何實(shí)現(xiàn)封裝2-2,public class Teacher3Test public static void main(String args) Teacher3 teacher = new Teacher3(); teacher.setName (李芳); teacher.setAge(10); System.out.println(roduction(); ,使用封裝,增加了數(shù)據(jù)訪問(wèn)限制,增強(qiáng)了程序的可維護(hù)性,錯(cuò)誤!最小年齡應(yīng)為22歲! 大家好!我是李芳,我今年22歲,測(cè)試類(lèi)通過(guò)調(diào)用setter方法,為對(duì)象的各個(gè)屬性賦值
13、,小結(jié) 4,使用private關(guān)鍵字修飾某個(gè)成員變量后,這個(gè)成員變量可以被同一包中的其它類(lèi)訪問(wèn)嗎? 在Java程序中,代碼封裝帶給我們的好處是什么?,小結(jié)5,請(qǐng)通過(guò)代碼封裝,實(shí)現(xiàn)如下需求: 編寫(xiě)一個(gè)類(lèi)Book,代表教材: 具有屬性:名稱(chēng)(title)、頁(yè)數(shù)(pageNum),其中頁(yè)數(shù)不能少于200頁(yè),否則輸出錯(cuò)誤信息,并賦予默認(rèn)值200 為各屬性設(shè)置賦值和取值方法 具有方法:detail,用來(lái)在控制臺(tái)輸出每本教材的名稱(chēng)和頁(yè)數(shù) 編寫(xiě)測(cè)試類(lèi)BookTest進(jìn)行測(cè)試:為Book對(duì)象的屬性賦予初始值,并調(diào)用Book對(duì)象的detail方法,看看輸出是否正確,為什么需要構(gòu)造方法 2-1,開(kāi)發(fā)教員類(lèi)Teac
14、her4,要求: 具有屬性:姓名、年齡、學(xué)歷、職位 具有行為:自我介紹,public class Teacher4 private String name; / 姓名 private int age; / 年齡 private String education; / 學(xué)歷 private String position; / 職位 public String introduction() return 大家好!我是 + name + ,我今年” + age + 歲,學(xué)歷“ +education+,目前職位是+position; public String getName() return na
15、me; public void setName(String myName) name = myName; / 以下是其他屬性的setter、getter方法,此處省略 ,為什么需要構(gòu)造方法 2-2,編寫(xiě)一個(gè)測(cè)試類(lèi),要求: 實(shí)例化一個(gè)教員對(duì)象,并對(duì)其初始化 在控制臺(tái)輸出該教員的自我介紹,public class Teacher4Test public static void main(String args) Teacher4 teacher = new Teacher4(); teacher.setName(李芳); teacher.setAge(23); teacher.setEducat
16、ion(本科); System.out.println(roduction(); ,要簡(jiǎn)化對(duì)象初始化的代碼,可以通過(guò)構(gòu)造方法來(lái)解決,大家好!我是李芳,我今年23歲,學(xué)歷本科,目前職位是null,AccpTeacher4中有太多的屬性及對(duì)應(yīng)的setter方法,在初始化時(shí),很容易就忘記了,有沒(méi)有可能簡(jiǎn)化對(duì)象初始化的代碼?,什么是構(gòu)造方法,構(gòu)造方法負(fù)責(zé)對(duì)象成員的初始化工作,為實(shí)例變量賦予合適的初始值 構(gòu)造方法必須滿(mǎn)足以下語(yǔ)法規(guī)則: 1、方法名與類(lèi)名相同 2、沒(méi)有返回類(lèi)型,public class Teacher5 private String name; / 教員姓名 / 構(gòu)造
17、方法 public Teacher5() name = 無(wú)名氏; ,public class Teacher5Test public static void main(String args) Teacher5 teacher = new Teacher5(); ,使用new關(guān)鍵字調(diào)用構(gòu)造方法,帶參數(shù)的構(gòu)造方法 2-1,通過(guò)帶參數(shù)的構(gòu)造方法,顯式地為實(shí)例變量賦予初始值,public class Teacher6 private String name; / 教員姓名 private int age; / 年齡 private String education; / 學(xué)歷 private Str
18、ing position; / 職位 / 帶參數(shù)的構(gòu)造方法 public Teacher6(String pName,int pAge,String pEducation,String pPosition) name = pName; age = pAge; / 可以增加對(duì)age等屬性的存取限制條件 education = pEducation; position = pPosition; public String introduction() return 大家好!我是 + name + ,我今年 + age + 歲,學(xué)歷 + education + ,目前職位是+position; ,帶
19、參數(shù)的構(gòu)造方法 2-2,通過(guò)調(diào)用帶參數(shù)的構(gòu)造方法,簡(jiǎn)化對(duì)象初始化的代碼,public class Teacher6Test public static void main(String args) Teacher6 teacher = new Teacher6(李芳, 23, 本科, 咨詢(xún)師); System.out.println(roduction(); ,創(chuàng)建對(duì)象時(shí),一并完成了對(duì)象成員的初始化工作,大家好!我是李芳,我今年23歲,學(xué)歷本科,目前職位是咨詢(xún)師,小結(jié) 6,編寫(xiě)一個(gè)類(lèi)Book2,代表教材: 具有屬性:名稱(chēng)(title)、頁(yè)數(shù)(pageNum),其中頁(yè)數(shù)不能
20、少于200頁(yè),否則輸出錯(cuò)誤信息,并賦予默認(rèn)值200 具有方法: detail,用來(lái)在控制臺(tái)輸出每本教材的名稱(chēng)和頁(yè)數(shù)。 具有帶參數(shù)的構(gòu)造方法:用來(lái)完成對(duì)象的初始化工作,并在構(gòu)造方法中完成對(duì)頁(yè)數(shù)的最小值限制 編寫(xiě)測(cè)試類(lèi)Book2Test進(jìn)行測(cè)試:初始化一個(gè)Book2對(duì)象,并調(diào)用該Book2對(duì)象的detail方法,看看輸出是否正確,生活中的方法重載,類(lèi),方法,方法參數(shù),方法實(shí)現(xiàn),司機(jī),轎車(chē),巴士,火車(chē),駕駛,啟動(dòng)、行駛、,等待乘客上車(chē)、啟動(dòng)、 行駛、到站停車(chē)、,正點(diǎn)發(fā)車(chē)、行駛、 到站停車(chē)、,如果用代碼實(shí)現(xiàn),我們需要三個(gè)方法,這些方法的方法名稱(chēng)相同,參數(shù)類(lèi)型不同,方法重載的代碼示例 1,方法重載并不陌
21、生 java.io.PrintStream類(lèi)的println方法能夠打印數(shù)據(jù)并換行,根據(jù)數(shù)據(jù)類(lèi)型的不同,有多種實(shí)現(xiàn)方式,public class Test public static void main(String args) int i = 0; char c = z; String str = hello; System.out.println(i); System.out.println(c); System.out.println(str); ,PrintStream,println(int) println(char) println(String) ,方法名相同,參數(shù)類(lèi)型不同,調(diào)
22、用不同的println方法,方法重載,方法重載的代碼示例 2,java.lang.Math類(lèi)的max()方法能夠從兩個(gè)數(shù)字中取出最大值,它有多種實(shí)現(xiàn)方式 運(yùn)行時(shí),Java虛擬機(jī)先判斷給定參數(shù)的類(lèi)型,然后決定到底執(zhí)行哪個(gè)max()方法,public class Test public static void main(String args) Math.max(1,2); Math.max(1.0F,2.F); Math.max(1.0,2); ,方法重載,構(gòu)造方法重載 2-1,構(gòu)造方法重載是方法重載的典型示例,public class Teacher7 private String name;
23、 / 教員姓名 private String school = 北京中心; / 所在中心 public Teacher7(String name) = name; /設(shè)定教員姓名 public Teacher7(String name, String school) = name; /設(shè)定教員姓名 this.school = school; /設(shè)定教員的所在中心 public String introduction() return 大家好!我是 + school + 的 + name ; ,構(gòu)造方法重載,構(gòu)造方法重載 2-2,通過(guò)調(diào)用不同的構(gòu)造方法來(lái)表
24、達(dá)對(duì)象的多種初始化行為 例如: 默認(rèn)情況下,教師來(lái)自北京中心,初始化時(shí),只需提供教員姓名 有時(shí),需要提供所在中心名稱(chēng)及教員姓名,public class Teacher7Test public static void main(String args) Teacher7 teacher1 = new Teacher7(李芳); System.out.println(roduction(); Teacher7 teacher2 = new Teacher7(張欣, 天津中心); System.out.println(roduction(); ,大家
25、好!我是北京中心的李芳 大家好!我是天津中心的張欣,小結(jié) 7,編寫(xiě)一個(gè)類(lèi)Book3,代表教材: 具有屬性:名稱(chēng)(title)、頁(yè)數(shù)(pageNum)、種類(lèi)(type) 具有方法:detail,用來(lái)在控制臺(tái)輸出每本教材的名稱(chēng)、頁(yè)數(shù)、種類(lèi) 具有兩個(gè)帶參構(gòu)造方法:第一個(gè)構(gòu)造方法中,設(shè)置教材種類(lèi)為“計(jì)算機(jī)”(固定),其余屬性的值由參數(shù)給定;第二個(gè)構(gòu)造方法中,所有屬性的值都由參數(shù)給定 編寫(xiě)測(cè)試類(lèi)Book3Test進(jìn)行測(cè)試: 分別以?xún)煞N方式完成對(duì)兩個(gè)Book3對(duì)象的初始化工作,并分別調(diào)用它們的detail方法,看看輸出是否正確,給定如下Java代碼,請(qǐng)指出代碼中的錯(cuò)誤,并解釋原因。,public clas
26、s Sample private int x; public Sample() x = 1; public Sample(int i) x = i; public int Sample(int i) x = i; return x+; private Sample(int i, String s) public Sample(String s,int i) private Sampla(int i) x=i+; private void Sampla(int i) x=i+; ,總結(jié),無(wú)參構(gòu)造方法,帶參構(gòu)造方法,不是構(gòu)造方法,帶參構(gòu)造方法,帶參構(gòu)造方法,名稱(chēng)與類(lèi)名不相同,不是構(gòu)造方法,生活中的
27、繼承 2-1,生活中,繼承的例子隨處可見(jiàn),動(dòng)物,食草動(dòng)物,食肉動(dòng)物,誰(shuí)是父類(lèi)? 誰(shuí)是子類(lèi)? 能說(shuō)出繼承的特點(diǎn)嗎?,繼承需要符合的關(guān)系:is-a,父類(lèi)更通用、子類(lèi)更具體,生活中的繼承 2-2,子類(lèi)具有父類(lèi)的一般特性(包括屬性和行為),以及自身特殊的特性,巴士是汽車(chē)嗎? 卡車(chē)是汽車(chē)嗎? 出租車(chē)是汽車(chē)嗎?,汽車(chē),請(qǐng)問(wèn):出租車(chē)包含哪些屬性和行為呢?,為什么需要繼承 4-1,開(kāi)發(fā)ACCP教員類(lèi),其中教員分為Java教員以及.NET教員,各自的要求如下: Java教員 屬性:姓名、所屬中心 方法:授課(步驟:打開(kāi)Eclipse、實(shí)施理論課授課)、自我介紹 .NET教員 屬性:姓名、所屬中心 方法:授課(步
28、驟:打開(kāi)Visual studio 2005、實(shí)施理論課授課)、自我介紹,請(qǐng)問(wèn):以下這個(gè)解決方案中存在著什么問(wèn)題?,為什么需要繼承 4-2,代碼存在重復(fù),違背了“write once, only once”的原則,為什么需要繼承 4-3,如何改進(jìn)?有沒(méi)有可能建立繼承關(guān)系,讓子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法?,Java教員是教員嗎? .NET教員是教員嗎?,public class AccpTeacher private String name; / 教員姓名 private String school; / 所在中心 public AccpTeacher(String myName, String
29、 mySchool) name = myName; school = mySchool; public void giveLesson() System.out.println(知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問(wèn)); public void introduction() System.out.println(大家好!我是“ + school + 的 + name + 。); ,現(xiàn)在,所有子類(lèi)中相同的代碼都抽取到父類(lèi)中了,為什么需要繼承 4-4,public class AccpJavaTeacher2 extends AccpTeacher public AccpJ
30、avaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動(dòng) Eclipse); super.giveLesson(); ,public class AccpDotNetTeacher2 extends AccpTeacher public AccpDotNetTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLe
31、sson() System.out.println(啟動(dòng) Visual Studio .NET); super.giveLesson(); ,使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用,子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法,子類(lèi)中不再存在重復(fù)代碼,如何實(shí)現(xiàn)繼承 3-1,在Java語(yǔ)言中,用extends關(guān)鍵字來(lái)表示一個(gè)類(lèi)繼承了另一個(gè)類(lèi),例如:,public class AccpJavaTeacher2 extends AccpTeacher /其余代碼省略 ,在父類(lèi)中只定義一些通用的屬性與方法,例如:,public class AccpTeacher private String name; / 教員姓名 pri
32、vate String school; / 所在中心 public AccpTeacher(String myName, String mySchool) /初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn) ,如何實(shí)現(xiàn)繼承 3-2,子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法,子類(lèi)中可以定義特定的屬性和方法,public class AccpTeacher private String name; / 教員姓名 private String school;/ 所在中心 public AccpTe
33、acher (String myName, String mySchool) /初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn) ,public class AccpJavaTeacher2 extends AccpTeacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟
34、動(dòng)Eclipse); super.giveLesson(); ,由于giveLesson()方法與父類(lèi)的實(shí)現(xiàn)有所不同,因此重寫(xiě)了該方法,方法重寫(xiě):子類(lèi)和父類(lèi)的方法具有相同的名稱(chēng)、參數(shù)列表、返回類(lèi)型,父類(lèi)中的屬性和方法可以被子類(lèi)繼承,public class AccpJavaTeacher2 extends AccpTeacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool); ,如何實(shí)現(xiàn)繼承 3-3,子類(lèi)的構(gòu)造方法中,通過(guò)super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造方法,方法重寫(xiě)后,通過(guò)supe
35、r關(guān)鍵字調(diào)用父類(lèi)的方法,public class AccpJavaTeacher2 extends AccpTeacher public void giveLesson() System.out.println(啟動(dòng) Eclipse); super.giveLesson(); ,通過(guò)調(diào)用父類(lèi)的構(gòu)造方法,完成對(duì)屬性值的初始化,一切類(lèi)的“祖先”O(jiān)bject,在Java 中,所有的Java類(lèi)都直接或間接地繼承了java.lang.Object類(lèi),public class MyObject / ,public class MyObect extends Object / ,在Eclipse中調(diào)用MyO
36、bject對(duì)象的成員,會(huì)自動(dòng)彈出繼承自O(shè)bject的所有方法,小結(jié) 8,請(qǐng)編碼實(shí)現(xiàn)動(dòng)物世界的繼承關(guān)系: 動(dòng)物(Animal)具有行為:吃(eat)、睡覺(jué)(sleep) 動(dòng)物包括:兔子(Rabbit),老虎(Tiger) 這些動(dòng)物吃的行為各不相同(兔子吃草,老虎吃肉);但睡覺(jué)的行為是一致的。 請(qǐng)通過(guò)繼承實(shí)現(xiàn)以上需求,并編寫(xiě)測(cè)試類(lèi)AnimalTest進(jìn)行測(cè)試。,為什么需要多態(tài) 5-1,在ACCP教員類(lèi)的基礎(chǔ)上,開(kāi)發(fā)一個(gè)類(lèi)代表總部,負(fù)責(zé)對(duì)各教員進(jìn)行評(píng)估,評(píng)估內(nèi)容包括: 1、教員的自我介紹 2、教員的授課,為什么需要多態(tài) 5-2,public class HQ1 public void judge(A
37、ccpJavaTeacher2 t) roduction(); t.giveLesson(); public void judge(AccpDotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(張明,天津中心“); ,第一種解決方案,大家好!我是北京中心的李明. 啟動(dòng) Eclip
38、se 知識(shí)點(diǎn)講解 總結(jié)提問(wèn) 大家好!我是天津中心的張明. 啟動(dòng) Visual Studio 2005 知識(shí)點(diǎn)講解 總結(jié)提問(wèn),控制臺(tái)輸出,為什么需要多態(tài) 5-3,現(xiàn)在,升級(jí)ACCP教員類(lèi),增加一種新類(lèi)型:AccpDBTeacher,該類(lèi)型的教員專(zhuān)門(mén)負(fù)責(zé)教授數(shù)據(jù)庫(kù),要求如下: 屬性:姓名、所屬中心 方法:授課(啟動(dòng)Sql Server、實(shí)施理論課授課)、自我介紹 同時(shí),總部也負(fù)責(zé)對(duì)這類(lèi)教員進(jìn)行評(píng)估,為什么需要多態(tài) 5-4,如果在第一種解決方案的基礎(chǔ)上去解決,我們需要如下兩個(gè)步驟: 建立AccpDBTeacher類(lèi) 修改總部類(lèi),增加方法:judge(AccpDBTeacher t),每增加一種新的教
39、員類(lèi)型,都要修改總部類(lèi),增加相應(yīng)的judge(評(píng)估)方法,代碼的可擴(kuò)展性及可維護(hù)性極差,能找到這個(gè)解決方案的弊端嗎?,為什么需要多態(tài) 5-5,第二種解決方案使用多態(tài),public class HQ3 public void judge(AccpTeacher t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(張明,
40、天津中心); hq.judge(new AccpDBTeacher(“李嵐,北京中心“); ,可以接收子類(lèi)類(lèi)型,根據(jù)實(shí)際創(chuàng)建的對(duì)象類(lèi)型調(diào)用相應(yīng)方法,大家好!我是北京中心的李明. 啟動(dòng) Eclipse 知識(shí)點(diǎn)講解 總結(jié)提問(wèn) 大家好!我是天津中心的張明. 啟動(dòng) Visual Studio 2005 知識(shí)點(diǎn)講解 總結(jié)提問(wèn) 大家好!我是北京中心的李嵐. 啟動(dòng) Sql Server 知識(shí)點(diǎn)講解 總結(jié)提問(wèn),控制臺(tái)輸出,使用多態(tài)之后,當(dāng)需要增加新的子類(lèi)類(lèi)型時(shí),無(wú)需更改總部類(lèi),程序的可擴(kuò)展性及可維護(hù)性增強(qiáng),什么是多態(tài),簡(jiǎn)單來(lái)說(shuō),多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征 同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作,
41、彩色打印機(jī),打印機(jī),黑白打印機(jī),打印效果:彩色,打印效果:黑白,打印,打印,public class AccpTeacher public void giveLesson() System.out.println(知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問(wèn)); ,如何實(shí)現(xiàn)多態(tài),1、子類(lèi)重寫(xiě)父類(lèi)的方法 2、編寫(xiě)方法時(shí),使用父類(lèi)定義的方法 3、運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類(lèi)型動(dòng)態(tài)決定使用哪個(gè)方法,小結(jié) 9,請(qǐng)編碼實(shí)現(xiàn)如下需求: 樂(lè)器(Instrument)分為:鋼琴(Piano)、小提琴(Violin) 各種樂(lè)器的彈奏( play )方法各不相同。 編寫(xiě)一個(gè)測(cè)試類(lèi)Instrume
42、ntTest,要求: 編寫(xiě)方法testPlay,對(duì)各種樂(lè)器進(jìn)行彈奏測(cè)試。要依據(jù)樂(lè)器的不同,進(jìn)行相應(yīng)的彈奏。 在main方法中進(jìn)行測(cè)試,總結(jié) 2-1,class Base public String name; public Base() name = Base; public Base(String pName) name = pName; public void method() System.out.println(name); ,class Child extends Base public Child() super(Child1); name=Child2; ,給定如下Java代碼,
43、編譯運(yùn)行后,輸出結(jié)果是什么?,public class Sample public static void main(String args) Child c = new Child(); c.method(); ,Child2,控制臺(tái)輸出,1,2,3,總結(jié) 2-2,給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?,public class AccpTeacher public void giveLesson() System.out.println(知識(shí)點(diǎn)講解); ,public class AccpDBTeacher extends AccpTeacher public void giv
44、eLesson() System.out.println(啟動(dòng) SqlServer); ,1,2,public class Test public static void main(String args) AccpTeacher t = new AccpDBTeacher (); t.giveLesson(); ,控制臺(tái)輸出,啟動(dòng) SqlServer,為什么需要包,生活案例,文檔分門(mén)別類(lèi),易于查找,不同內(nèi)容的文檔可以放在不同的 袋子中,擁有相同的名字,避免沖突,易于管理,允許類(lèi)組成較小的單元(類(lèi)似 文件夾),易于找到和使用相 應(yīng)的文件,防止命名沖突,更好的保護(hù)類(lèi)、數(shù) 據(jù)和方法,為什么需要包,
45、Java的系統(tǒng)程序包,如何創(chuàng)建包,package myjava.sg.chap3 ; public class School public String toString() ,包名,使用package聲明包, 以分號(hào)結(jié)尾,如果有包的聲明,一定 作為Java源代碼的第一條 語(yǔ)句,包與目錄的關(guān)系,創(chuàng)建包myjava.sg.chap3,即創(chuàng)建目錄結(jié)構(gòu) .myjavasgchap3 ,包與文件夾同名。,myjava,sg,chap3,School.java,Hello.java,如何導(dǎo)入包,為了使用不在同一包中的類(lèi),需要在Java程序中使用import關(guān)鍵字導(dǎo)入這個(gè)類(lèi),import java.uti
46、l.*; /導(dǎo)入java.util包中所有類(lèi) import java.lang.*; /導(dǎo)入java.lang包中所有類(lèi),關(guān)鍵字import并不陌生,import 包名. 類(lèi)名;,1、系統(tǒng)包(eg:java.lang) 2、自定義包:net.javagroup,*: 指包中的所有類(lèi) Hello:指包中的Hello類(lèi),文件1: MyClass1.java,文件2: MyClass2.java,文件3: Test.java,package Mypackage; public class MyClass1 public void show1( ) System.out.println(這是類(lèi)MyCl
47、ass1); ,package Mypackage.Mypackage1; public class MyClass2 public void show2( ) System.out.println(這是類(lèi)MyClass2); ,import Mypackage.*; import Mypackage.Mypackage1.*; public class Test public static void main(String args ) MyClass1 obj1=new MyClass1( ); obj1.show1( ); MyClass2 obj2=new MyClass2( ); o
48、bj2.show2( ); ,代碼閱讀,School.java位于myjavasgchap3中,Hello.java位于myjavademomypackage中,下面程序空缺部分需要填入代碼嗎?如果需要,是什么?,/添加代碼2 /添加代碼3 public class Hello public static void main(String args) School center = new School(); System.out.println(center); ,/添加代碼1 public class School public String toString() return 這個(gè)是Sc
49、hool類(lèi); ,package myjava.sg.chap3;,package myjava.demo.mypackage;,import myjava.sg.chap3.School;,一旦類(lèi)放入包中,包名和類(lèi)名 共同組合才能描述一個(gè)類(lèi),這里java.lang.System;自動(dòng)導(dǎo)入,生活中的接口,電腦主板上的PCI插槽的規(guī)范就類(lèi)似于Java接口,聲卡,顯卡,網(wǎng)卡,每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔(dān)心哪個(gè)插槽是專(zhuān)門(mén)插哪個(gè)卡的,主板,Java接口的聲明,一個(gè)Java接口是一些抽象方法和常量的集合,public interface PCI public
50、 void start(); public void stop();,這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范,public interface 接口名 extends 父接口名列表 public static final 類(lèi)型 常量名=常量值; public abstract 返回值類(lèi)型 方法名(參數(shù)列表); ,Java接口的實(shí)現(xiàn),class SoundCard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!
51、); ,Java接口中定義的方法在不同的地方被實(shí)現(xiàn),可以具有完全不同的行為,class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同,修飾符 class 類(lèi)名 extends 父類(lèi) implements 接口列表 ,Java接口的應(yīng)用,public class Assembler public static void main(Str
52、ing args) PCI nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); ,可以使用接口標(biāo)識(shí)類(lèi)型 運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類(lèi)型調(diào)用相應(yīng)的方法實(shí)現(xiàn),Du du. Send.,控制臺(tái)輸出,2,1,利用接口實(shí)現(xiàn)多重繼承,利用接口,可以彌補(bǔ)了Java單一繼承的弱點(diǎn),用另一種方式實(shí)現(xiàn)多重繼承。,public class MainBoard public void usePCICard(_ p) p.start(); p.stop(); ,public class Assembler public st
53、atic void main(String args) MainBoard mb=new MainBoard(); /在主板上插入網(wǎng)卡 /在主板上插入聲卡 ,通過(guò)這個(gè)方法,主板上可以插入任意符合PCI插槽規(guī)范的卡,PCI nc=new NetworkCard(); mb.usePCICard(nc);,PCI sc=new SoundCard();mb.usePCICard(sc);,PCI,可以通過(guò)更換實(shí)現(xiàn)接口的類(lèi)來(lái)更換系統(tǒng)的實(shí)現(xiàn),接口作為參數(shù),接口作為參數(shù)使用,傳遞的是實(shí)現(xiàn)接口的對(duì)象,public interface Introduce public String detail(); public void introduction() detail(); private void showMessage(); void speak(); ,Java接口中的方法不能是private,Java接口中不能有方法體實(shí)現(xiàn),編譯器會(huì)自動(dòng)加上public修飾符,請(qǐng)指出下列Java代碼中的錯(cuò)誤。,為什么需要常量,生活中,一周有七天,如何用代碼表示?,public class Week private int days = 7; public s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年常州信息職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年03月上半年浙江舟山市普陀區(qū)部分事業(yè)單位公開(kāi)招聘工作人員20人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025年山西林業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025年山東文化產(chǎn)業(yè)職業(yè)學(xué)院高職單招(數(shù)學(xué))歷年真題考點(diǎn)含答案解析
- 2025年宿遷職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年寶雞職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- IP基礎(chǔ)知識(shí)課件下載
- 下肢靜脈血栓用藥護(hù)理
- 2025年天津?yàn)I海汽車(chē)工程職業(yè)學(xué)院高職單招語(yǔ)文2019-2024歷年真題考點(diǎn)試卷含答案解析
- 2025年天津工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年職業(yè)指導(dǎo)師專(zhuān)業(yè)能力測(cè)試卷:職業(yè)指導(dǎo)服務(wù)與心理咨詢(xún)
- 學(xué)校安全管理制度匯編
- 2025-2030中國(guó)化妝棉行業(yè)市場(chǎng)深度調(diào)研及發(fā)展策略研究報(bào)告
- 早產(chǎn)兒護(hù)理的試題及答案
- 信息技術(shù)公司成本控制措施
- 貿(mào)易安全培訓(xùn)
- 口腔科感染控制策略與措施實(shí)施指南
- NPI培訓(xùn)資料NEW課件
- 霧化吸入療法合理用藥專(zhuān)家共識(shí)(2024版)解讀
- 2025新北師大版英語(yǔ)七年級(jí)下單詞表
- 動(dòng)脈瘤病人的觀察及護(hù)理
評(píng)論
0/150
提交評(píng)論