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