大學(xué)教程(從零開始)面向?qū)ο缶幊袒A(chǔ)_第1頁
大學(xué)教程(從零開始)面向?qū)ο缶幊袒A(chǔ)_第2頁
大學(xué)教程(從零開始)面向?qū)ο缶幊袒A(chǔ)_第3頁
大學(xué)教程(從零開始)面向?qū)ο缶幊袒A(chǔ)_第4頁
大學(xué)教程(從零開始)面向?qū)ο缶幊袒A(chǔ)_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第3章面向?qū)ο缶幊袒A(chǔ)本部分重點(diǎn)JAVA語言的類對象繼承多態(tài)接口JAVA小應(yīng)用程序基礎(chǔ)3.1面向?qū)ο蟮幕靖拍?.1面向?qū)ο蟮幕靖拍? 抽象世界是由什么組成的? 名勝 人 物品 動物 ,植物 2 對象對象的特征屬性屬性對象具有的各種特征 每個對象的每個屬性都擁有特定值例如:王小紅和朱小雨的體重不一樣 60kg王小紅屬性 35歲收銀員小王 對象的特征方法方法對象執(zhí)行的操作 打單 收銀 方法 刷卡 收銀員王小紅3 類:從對象抽取出類顧客類轎車類 類是模子,確定對象將會擁有的特征(屬性)和行為(方法)類是對象的類型不同于int類型:具有方法 各種口味的球狀冰淇淋 球狀冰淇淋模子類和對象有什么區(qū)別呢

2、?類是抽象的概念,僅僅是模板,比如說:“人”對象是一個你能夠看得到、摸得著的具體實(shí)體,比如:“小布什”小布什普京克林頓“人”類特征(屬性)年齡體重行為(方法)衣食住行4 消息對象之間的交互通過相互發(fā)送消息實(shí)現(xiàn)。105 繼承生活中,繼承的例子隨處可見動物食草動物食肉動物誰是父類?誰是子類?能說出繼承的特點(diǎn)嗎?繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體1112子類具有父類的一般特性(包括屬性和行為),以及自身特殊的特性巴士是汽車嗎?卡車是汽車嗎?出租車是汽車嗎?最大載客數(shù)量報站引擎數(shù)量外觀顏色剎車加速汽車最大載重量卸貨所屬公司最大載客數(shù)量打發(fā)票屬性行為13為什么要使用繼承 ?使用繼承,可

3、以有效實(shí)現(xiàn)代碼復(fù)用146 多態(tài)簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征 同一個實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作彩色打印機(jī) 打印機(jī) 黑白打印機(jī)打印效果:彩色打印效果:黑白打印 打印 7 封裝對象同時具有屬性和方法兩項(xiàng)特性對象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性, 二者相輔相承,不能分割誰看見過只有“完好的零件和顏色”而不能開動的汽車?3.2Java 的類和對象 所有Java程序都以類class為組織單元 1.類Java類模板類將現(xiàn)實(shí)世界中的概念模擬到計算機(jī)程序中public class 類名 /定義屬性部分 屬性1的類型 屬性1; 屬性2的類型 屬性2; 屬性n的類型 屬性

4、n; /定義方法部分 方法1; 方法2; 方法m;定義類定義一個類的步驟1、定義類名2、編寫類的屬性3、編寫類的方法常見錯誤public class .Book String bookName; String authorName; int pageNum; boolean isAvailable; 類命名規(guī)則:1、不能使用Java關(guān)鍵字2、首字母可以為字母,也可以是“_”或“$ ”(建議不要這樣)3、不能包含空格或“.”號代碼錯誤2.成員變量注意:類體內(nèi)的變量為成員變量;方法內(nèi)的變量為局部變量,局部變量只在所在的方法中有效。數(shù)據(jù)類型總結(jié)intdoublechar String使用class定

5、義的類型StudentTeacherSchool基本數(shù)據(jù)類型引用數(shù)據(jù)類型數(shù)據(jù)類型使用區(qū)別數(shù)據(jù)類型特征聲明使用基本數(shù)據(jù)類型沒有方法int i= 8;i+;引用數(shù)據(jù)類型具有方法Student stu = new Student();stu.age+;變量作用域變量聲明的位置決定變量作用域變量作用域確定可在程序中按變量名訪問該變量的區(qū)域for(int i = 0, a = 0; i 4; i+) a+;System.out.println(a);a的作用域僅在for循環(huán)中 代碼錯誤變量作用域變量1類型 變量1; 變量2類型 變量2;變量3類型 變量3;public 返回類型 方法1() 變量4類型

6、變量4;public 返回類型 方法2() 變量5類型 變量5; public class AutoLion AutoLion類的方法別的類的方法 誰能使用這些變量? 方法1 方法2 成員變量局部變量局部變量3.方法類的方法 電動玩具獅子屬性:顏色:黃色行為:跑叫按此按鈕,獅子開始跑如何定義類的方法類的方法定義類的某種行為(或功能) 方法的定義 方法的名稱 方法的主體 方法返回的數(shù)據(jù)類型 定義類的方法public 返回值類型 方法名() /這里編寫方法的主體步驟一:定義方法名以及返回值步驟二:編寫方法體方法的命名如何給方法起名字?必須以字母、_或開頭可以包括數(shù)字,但不能以它開頭遵循的命名規(guī)范通

7、常方法名是一個動詞,如果有兩個以上單詞組成,第一個單詞的首字母小寫,其后單詞首字母大寫方法的返回值兩種情況如果方法具有返回值,方法中必須使用關(guān)鍵字return返回該值,返回類型為該返回值的類型如果方法沒有返回值,返回類型為voidpublic class Student String name = 張三; public void getName() return name; 返回類型要匹配return 表達(dá)式;編譯錯誤常見錯誤public class School public static void main(String args) return “北京大學(xué)! ; 返回類型是void方法中

8、不能有返回值 常見錯誤public class Student public double getInfo() double weight = 95.5; double height = 1.69; return weight, height; 方法至多可以返回一個值,不能返回多個值方法調(diào)用方法是個“黑匣子”,完成某個特定的應(yīng)用程序功能,并返回結(jié)果方法調(diào)用:執(zhí)行方法中包含的語句 對象名.方法名();方法調(diào)用小結(jié)方法之間允許相互調(diào)用,不需要知道方法的具體實(shí)現(xiàn),提高了效率 情況舉例1、類Student 的方法a()調(diào)用Student類的方法b(),直接調(diào)用public void a() b();

9、/調(diào)用b() 2、類Student的方法a()調(diào)用類Teacher的方法b(),先創(chuàng)建類對象,然后使用“.”調(diào)用public void a() Teacher t = new Teacher(); t.b(); /調(diào)用Teacher類的b() 35this 關(guān)鍵字如果某方法中的參數(shù)名或局部變量的名與類的成員變量的名相同,則成員變量在這個方法內(nèi)暫時被隱藏。成員變量在方法內(nèi)被隱藏,又在方法中要引用成員變量,必須使用this關(guān)鍵字。用于任何實(shí)例方法內(nèi),指向當(dāng)前對象this 的值指向?qū)ζ湔{(diào)用當(dāng)前方法的對象 this 關(guān)鍵字可在需要當(dāng)前類類型的對象引用時使用 this 關(guān)鍵字的示例class Pixel

10、 int x;int y; void init (int x, int y) this.x = x; this.y = y; public static void main (String args) Pixel p = new Pixel(); p.init (4,3); 對象的引用37生活中的方法重載類方法方法參數(shù)方法實(shí)現(xiàn)司機(jī) 轎車 巴士 火車 駕駛啟動、行駛、等待乘客上車、啟動、行駛、到站停車、正點(diǎn)發(fā)車、行駛、到站停車、如果用代碼實(shí)現(xiàn),我們需要三個方法,這些方法的方法名稱相同,參數(shù)類型不同 38方法重載必須滿足的條件重載方法必須滿足以下條件:方法名相同。方法的參數(shù)類型、個數(shù)、順序至少有一

11、項(xiàng)不相同。方法的返回類型可以不相同。方法的修飾符可以不相同。調(diào)用重載方法時,Java 使用參數(shù)的類型和數(shù)量決定實(shí)際調(diào)用重載方法的哪個版本。 39方法重載的代碼示例方法重載并不陌生java.io.PrintStream類的println方法能夠打印數(shù)據(jù)并換行,根據(jù)數(shù)據(jù)類型的不同,有多種實(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.prin

12、tln(str);PrintStreamprintln(int)println(char)println(String)方法名相同,參數(shù)類型不同調(diào)用不同的println方法方法重載404 構(gòu)造方法構(gòu)造方法負(fù)責(zé)對象成員的初始化工作,為實(shí)例變量賦予合適的初始值構(gòu)造方法必須滿足以下語法規(guī)則:1、方法名與類名相同2、沒有返回類型public class Teacher5 private String name; / 教員姓名/ 構(gòu)造方法public Teacher5() name = 無名氏;Public Teacher5Test public static void main(String args

13、) Teacher5 teacher = new Teacher5();使用new關(guān)鍵字調(diào)用構(gòu)造方法41帶參數(shù)的構(gòu)造方法通過帶參數(shù)的構(gòu)造方法,顯式地為實(shí)例變量賦予初始值 public class Teacher6 private String name; / 教員姓名private int age; / 年齡private String education; / 學(xué)歷private String position; / 職位/ 帶參數(shù)的構(gòu)造方法Public Teacher6(String pName,int pAge,String pEducation,String pPosition) na

14、me = pName;age = pAge; / 可以增加對age等屬性的存取限制條件education = pEducation;position = pPosition;public String introduction() return 大家好!我是 + name + ,我今年 + age + 歲,學(xué)歷 + education + ,目前職位是+position;42帶參數(shù)的構(gòu)造方法通過調(diào)用帶參數(shù)的構(gòu)造方法,簡化對象初始化的代碼public class Teacher6Test public static void main(String args) Teacher6 teacher

15、= new Teacher6(李芳, 23, 本科, 咨詢師);System.out.println(roduction();創(chuàng)建對象時,一并完成了對象成員的初始化工作大家好!我是李芳,我今年23歲,學(xué)歷本科,目前職位是咨詢師3.2.6 繼承繼承是面向?qū)ο笳Z言的重要機(jī)制。借助繼承可以擴(kuò)展原有的代碼,應(yīng)用到其他程序中,不必重新編寫這些代碼,在Java中,繼承是通過擴(kuò)展原有的類,聲明新類來實(shí)現(xiàn)的。擴(kuò)展聲明的新類稱為子類,原有的類稱為超類(父類)Java語言不支持多重繼承,限定一個類只能有一個超類。extendsclass 子類名 extends 父類名 類體 class E

16、extends D 如果不指定超類,則該類的超類是系統(tǒng)聲明的類 Java.lang.Object子類自然的繼承其父類中不是private的成員變量作為自己的成員變量,并且自然的繼承父類中不是private的方法作為自己的方法。類的繼承原則如下:子類繼承父類的成員變量,包括實(shí)例成員變量和類成員變量。子類繼承父類除構(gòu)造方法以外的成員方法,包括實(shí)例成員方法和類成員方法。重寫子類不滿意父類的方法時,在子類中可以根據(jù)需要對從父類繼承來的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)列表和返回類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限。TestOverWrite.java與重載(o

17、verload)的區(qū)別:重載是函數(shù)名同,參數(shù)不同。重寫子類Dau中聲明了方法dance(),跟父類(超類)中的方法的名字,個數(shù),類型完全相同,超類的方法在子類中被隱藏。子類對象調(diào)用dance()時,自然調(diào)用子類的dance()方法。超類方法在子類中隱藏稱為重寫或置換。子類對成員變量的隱藏和方法的重寫可以把超類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。 例如下面的這段程序就是這樣的情況:class SuperClass /父類 int y; void setY() y=0; class SubClass extends SuperClass int y; / 父類變量y被隱藏 void setY()

18、/ 重寫父類的方法setY() y=1; class Parent public void function() System.out.println(I am in Parent!);class Child extends Parent private void function()System.out.println(I am in Child!);public class RTpolyTest public static void main(String args) Parent pl=new Parent( ); Parent p2=new Child( ); p1.function(

19、 ); p2.function( ); 方法重寫的例子(1)多態(tài)性動態(tài)聯(lián)編(動態(tài)綁定):編譯時暫不綁定調(diào)用哪個方法,而是在執(zhí)行期間判斷所引用對象的實(shí)際類型,根據(jù)其實(shí)際的類型調(diào)用其相應(yīng)的方法。new出對象來之后才能確定到底調(diào)用哪一個方法。(2)多層繼承多層繼承繼承聲明的新類,又可以被其他類再繼承,從而構(gòu)成多層繼承。(3)多層繼承中構(gòu)造方法的調(diào)用順序構(gòu)造方法的調(diào)用順序與類的繼承順序一致,從最高層次的超類開始,按繼承順序調(diào)用各類的構(gòu)造方法。如果子類的構(gòu)造方法要調(diào)用超類的構(gòu)造方法,給從超類繼承的成員變量初始化,用super。關(guān)鍵字super用來引用基類的成分。this:指向?qū)ο蟊旧?。super:指向當(dāng)

20、前對象的父對象。繼承中的構(gòu)造方法子類的構(gòu)造過程必須調(diào)用其基類的構(gòu)造方法。先構(gòu)造父類對象,再把剩下的東西造出來使用super(參數(shù)列表)調(diào)用基類的構(gòu)造方法;使用this(參數(shù)列表)調(diào)用本類的另外的構(gòu)造方法。如果調(diào)用了super,必須寫在子類構(gòu)造方法的第一行。如果子類的構(gòu)造方法中沒有顯式地調(diào)用基類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類無參數(shù)的構(gòu)造方法。如果子類構(gòu)造方法中既沒有顯式地調(diào)用基類構(gòu)造方法,而基類中又沒有無參的構(gòu)造方法,則編譯出錯。 3.2.7 java面向?qū)ο蟮钠渌麢C(jī)制final類,final方法,final變量final的類不能夠被繼承。final class D class M extends

21、 D 錯誤final的方法不能夠被重寫。final修飾變量,聲明該變量的值不能被改變,相當(dāng)于常量。final的成員變量final的局部變量(形參)final int variableName=10; final int a;a=1;a=2 錯誤習(xí)慣常量名用大寫abstract用abstract 關(guān)鍵字來修飾一個類時,這個類叫做抽象類。用abstract 關(guān)鍵字來修飾一個方法時,這個方法叫做抽象方法。含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。(子類去實(shí)現(xiàn))抽象類不能被實(shí)例化。抽象方法只需聲明,不需實(shí)現(xiàn)。super子類隱藏了超類的成員變量或者覆蓋了超類方法后,利用s

22、uper,子類可以引用超類的成員變量或被覆蓋的方法使用3種情況:使用super調(diào)用超類的構(gòu)造方法使用super調(diào)用超類被子類覆蓋的方法使用super訪問超類被子類隱藏的成員變量this 關(guān)鍵字this用來指自己。this有多種作用,例如,將對象自己作為參數(shù),調(diào)用別的方法.當(dāng)方法的局部變量隱藏成員變量時,利用this引用成員變量,在構(gòu)造函數(shù)內(nèi)調(diào)用另一構(gòu)造函數(shù)。class Pointint x,y;Point() x=10; y=20;Point(int x, int y) this.x=x; this.y=y; Point p1,p2class B int b,c; B () this(2,3)

23、; B(int x,int y)b=x;c=y;類之間的is-a和has-a關(guān)系如果類A是擴(kuò)展類B,則子類A和超類B之間是is-a關(guān)系。類B的所有成員 類A也有。如果類A的某個成員變量的類型是B,則類A和類B之間是has-a關(guān)系,類A包含類B內(nèi)部類Java也允許在類聲明內(nèi)部嵌套類聲明。嵌套的類可以是靜態(tài)的或者是非靜態(tài)的。靜態(tài)類不能直接引用其他包含類的成員,必須實(shí)例化。非靜態(tài)的嵌套類,因?yàn)樾枰M(jìn)行事件處理,非常流行3.3 接口Java程序中類只能繼承一個類,這種繼承稱為單繼承。Java雖然不允許一個類繼承多個類,但允許一個類實(shí)現(xiàn)多個接口。接口有與類相似的基本形式。接口有常量的定義和方法定義,但沒

24、有方法的實(shí)現(xiàn)代碼。類除了能繼承一個類外,可以實(shí)現(xiàn)多個接口。1、接口的定義public interface 接口名 extends 超接口表 接口體 接口名通常以able或ible結(jié)尾。接口是一種只能由常量定義和抽象方法組成的特殊類。用public修飾的接口是公共接口,可以被所有的類和接口使用。沒有的只能被同一個包中的其他類和接口使用。2、接口體接口體中的內(nèi)容是一系列常量定義和方法定義。其中方法定義是一種方法聲明,不提供方法的實(shí)現(xiàn)。用;結(jié)尾interface Sleepablefinal int MAX=100;void sleepSometime(int daltaT);float work(

25、float x,float y);接口的所有變量都默認(rèn)是final static屬性,所有的方法都默認(rèn)為public abstract屬性。一個類可以用implements聲明自己使用一個或多個接口,實(shí)現(xiàn)多個接口時,接口名用逗號隔開。class pig extends Animal implements Eatable,Sleepable 如果一個類要實(shí)現(xiàn)一個接口,那必須實(shí)現(xiàn)該接口的所有方法,為這些方法提供實(shí)現(xiàn)的方法體。實(shí)現(xiàn)必須完全一致,并用public修飾。3.4 基本類基本類型值與基本類對象能相互轉(zhuǎn)換??梢岳靡韵滦问降幕绢悩?gòu)造方法,由基本類型值得到對應(yīng)基本類對象。public 基本類(

26、基本類型 v)例如 Integer n=new Integer(123);也可以由基本類對象到基本類型值。設(shè)有一個Double類對象dobj, double d=dobj.doubleValue();boolean b=bobj.booleanValue();3.5 Java 小應(yīng)用程序每個小程序都繼承java.applet.Applet如果小應(yīng)用程序已經(jīng)用import java.applet.Applet導(dǎo)入系統(tǒng)Applet類,小應(yīng)用程序的主類 public class 主類名 extends Applet如果未用import導(dǎo)入系統(tǒng)Applet,則主類聲明: public 類名 exten

27、ds java.applet.Applet小應(yīng)用程序不能調(diào)用本地的應(yīng)用程序和動態(tài)時的動態(tài)數(shù)據(jù)庫等1、小應(yīng)用程序的建立和運(yùn)行一個小應(yīng)用程序從建立到運(yùn)行4步驟(1)用Java語言編寫小程序的源程序(2)把小應(yīng)用程序的源程序編譯成字節(jié)碼.class文件(3)將應(yīng)用程序的字節(jié)碼文件嵌入web頁中,設(shè)計一個指定小應(yīng)用程序的html文件.html(4)在支持Java的瀏覽器上運(yùn)行.2、Applet類的基本方法1 init( ) 初始化,由瀏覽器載入內(nèi)存時調(diào)用init(),該方法只運(yùn)行一次2start( ) 初始化后,緊接著調(diào)用start()方法,啟動小應(yīng)用程序主線程,或當(dāng)用戶從小應(yīng)用程序所在的web頁面轉(zhuǎn)

28、到其他頁面,然后又返回時,start()方法再次被調(diào)用。3stop( ) 當(dāng)瀏覽器離開小應(yīng)用程序所在的頁面轉(zhuǎn)到其他頁面,調(diào)用stop()方法,掛起小應(yīng)用程序的執(zhí)行。4destroy( ) 當(dāng)關(guān)閉瀏覽器時,調(diào)用destroy()方法,結(jié)束小應(yīng)用程序的生命,關(guān)閉線程釋放對象資源。5、paint(Graphics g)方法 該方法用于在屏幕上顯示某些信息。如文字,色彩,背景圖像等。6、repaint()方法 為在java頁面上顯示動態(tài)效果,需要repaint方法,先清除paint方法以前所畫的內(nèi)容,然后再調(diào)用paint()方法。7、update()方法 調(diào)用repaint()方法時,系統(tǒng)會自動調(diào)用u

29、pdate方法。import java.awt.*;import java.applet.*;public class e324 extends Applet String ;public void init() sleeptime=getParameter(sleeptime);();public void paint(Graphics g) g.drawString(sleeptime, 50, 60 );g.drawString(, 80, 80 );class Complexdouble a,b; /a為實(shí)部,b為虛部 a+biComplex()Complex(int a,int b)

30、this.a=a;this.b=b;public String print()/輸出復(fù)數(shù),返回復(fù)數(shù)的字符串表示形式String result=new String(this.a+(b0)?+:)+(b!=0)?this.b+i:);return result;public double getA()/取復(fù)數(shù)實(shí)部,返回復(fù)數(shù)的實(shí)部return a;public double getB()/取復(fù)數(shù)的虛部,返回復(fù)數(shù)的虛部return b;3.6 子類在什么情況下能隱藏超類的成員變量和方法?解:子類重載父類的成員變量、方法時候。3.7 在子類中是否允許有一個方法和超類的方法名字相同,而類型不同?解:方法

31、重寫是指:子類中定義一個方法,并且這個方法的名字、返回類型、參數(shù)個數(shù)、和類型與從父類繼承的方法完全相同。public Complex add(Complex val) /復(fù)數(shù)加法,返回當(dāng)前復(fù)數(shù)對象與參數(shù)指定的復(fù)數(shù)對象的和Complex result=new Complex();result.a=this.a+val.a;result.b=this.b+val.b;return result;public Complex subtract(Complex val) /復(fù)數(shù)減法,返回當(dāng)前復(fù)數(shù)對象與參數(shù)指定的復(fù)數(shù)對象的差,當(dāng)前對象減去參數(shù)對象Complex result=new Complex();result.a=this.a-val.a;result.b=this.b-val.b;return result;public Complex multiply(Complex val)/復(fù)數(shù)乘法,返回當(dāng)前復(fù)數(shù)對象與參數(shù)指定的復(fù)數(shù)對象的積Complex result=new Complex();result.a=this.a*val.a-this.b*val.b;result.b=this.a*val.b+this.b*val.a;return result;public Complex div

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論