




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三講 Java與面向?qū)ο蠹夹g(shù),1、面向?qū)ο蟮母拍?2、Java中的類、方法和變量 3、Java名字空間及訪問規(guī)則 4、Java中的抽象類、接口和程序包 5、對象的構(gòu)造方法,所謂面向?qū)ο蟮姆椒▽W(xué),就是使我們分析、設(shè)計和實現(xiàn)一個系統(tǒng)的方法盡可能地接近我們認識一個系統(tǒng)的方法。包括: 面向?qū)ο蟮姆治觯∣OA, Object-Oriented Analysis) 面向?qū)ο蟮脑O(shè)計(OOD, Object-Oriented Design) 面向?qū)ο蟮某绦蛟O(shè)計(OOP, Object-Oriented Program) 面向?qū)ο蠹夹g(shù)主要圍繞以下幾個概念: 對象、抽象數(shù)據(jù)類型、類、類型層次(子類)、繼承性、多
2、態(tài)性。,1、面向?qū)ο蟮母拍?對象有兩個層次的概念: 現(xiàn)實生活中對象指的是客觀世界的實體; 程序中對象就是一組變量和相關(guān)方法的集合,其中變量表明對象的狀態(tài),方法表明對象所具有的行為。,1、面向?qū)ο蟮母拍?對象,可以將現(xiàn)實生活中的對象經(jīng)過抽象,映射為程序中的對象。對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。,1、面向?qū)ο蟮母拍?對象,類是描述對象的“基本原型”,它定義一類對象所能擁有的數(shù)據(jù)和能完成的操作。在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。 相似的對象可以歸并到同一個類中去,就像傳統(tǒng)語言中的變量與類型關(guān)系一樣。 程序中的對象是類的一個實例,是一個軟件單
3、元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。,1、面向?qū)ο蟮母拍?類,1、面向?qū)ο蟮母拍?類,變量:指對象的所知道的狀態(tài)。 方法:指對象的功能單元。 消息 軟件對象通過相互間傳遞消息來相互作用和通信,一個消息由三部分組成: 1. 接受消息的對象 2. 接收對象要采取的方法 3. 方法需要的參數(shù),1、面向?qū)ο蟮母拍?類,一個例子 在程序中所操作的對象是類的一個實例。 創(chuàng)建一個對象: Hello obj=new Hello(); 調(diào)用方法: obj.showString(); 調(diào)用對象的方法相當(dāng)于給對象發(fā)送消息,收到消息的對象通過改 變自身的狀態(tài)或者向其它對象發(fā)送消息來響應(yīng)消息。,1、面向?qū)ο?/p>
4、的概念 類,為什么要使用類? 采用簡單數(shù)據(jù)類型表示現(xiàn)實世界中概念的局存在很大的限性。例如:采用int型數(shù)據(jù)表示一個日期概念,需要使用3個變量: int day, month, year; 如果要表示2個人的生日,就要使用6個變量 并且在使用中必須時刻注意三者的聯(lián)系和約束關(guān)系 同時在使用日期概念時要同時對三個變量進行訪問 使用類可以把現(xiàn)實問題中的對象映射為程序中的一個整體類。,1、面向?qū)ο蟮母拍?類,類中不但有變量,還有與之相關(guān)的操作所定義的方法。將變量和方法封裝在一個類中,可以對成員變量進行隱藏,外部對類成員的訪問都通過方法進行,能夠保護類成員不被非法修改。,class BirthDate p
5、ublic int day,month,year; public int tomorrow() BirthDate mybirth, yourbirth;,BirthDate date; 已知當(dāng)前日期對象,求第2天的日期對象:date.day =date.day+1; 如果date.day已經(jīng)為31,操作結(jié)果是非法狀態(tài)??梢远x一個成員方法tomorrow(),求第2天的日期對象。外部要獲得當(dāng)前日期的后一天時,只要調(diào)用: date.tomorrow();,1、面向?qū)ο蟮母拍?類,封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝實際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對
6、類的修改和訪問數(shù)據(jù)的程度。,1、面向?qū)ο蟮母拍?封裝,子類是作為另一個類的擴充或修正而定義的一個類。,1、面向?qū)ο蟮母拍?子類,繼承是子類利用父類中定義的方法和變量,就像它們屬于子類本身一樣。,class Car int color_number; int door_number; int speed; public void push_break() public void add_oil() ,class Trash_Car extends Car double amount; public void fill_trash() ,1、面向?qū)ο蟮母拍?繼承,方法的覆蓋 覆蓋使得在子類中可以重
7、新定義父類中已有的方法,從而體現(xiàn)出子類自己的行為。,class Car int color_number; int door_number; int speed; public void push_break() speed = 0; public void add_oil() ,class Trash_Car extends Car double amount; public void fill_trash() public void push_break() speed = speed 10; ,1、面向?qū)ο蟮母拍?方法的覆蓋,重載指得是在同一個類中至少有兩個方法用同一個名字,但有不同的參
8、數(shù)。,1、面向?qū)ο蟮母拍?方法的重載(多態(tài)性),例如對于StringBuffer類,它有方法 public StringBuffer append(int i); public StringBuffer append(double d); public StringBuffer append(String s); public StringBuffer append(char str, int offset, int len);,類、方法、變量定義的語法規(guī)范 對象的創(chuàng)建和使用 繼承、覆蓋、重載、多態(tài)等概念 內(nèi)嵌類(inner class),2、Java中的類、方法和變量,2、Java中的類、方
9、法和變量 類定義的語法規(guī)范,類的嚴格定義及修飾字,類的修飾字: public abstract | final 缺省方式為 friendly,變量修飾字 變量數(shù)據(jù)類型 變量名1,變量名2=變量初值;,變量的定義及修飾字,public | protected | private static final transient volatile,成員變量的類型可以是Java中任意的數(shù)據(jù)類型,包括簡單類型,類,接口,數(shù)組。在一個類中的成員變量應(yīng)該是唯一的。,2、Java中的類、方法和變量 變量定義的語法規(guī)范,方法修飾字 返回類型 方法名稱(參數(shù)1,參數(shù)2,) throws exceptionList
10、(statements;) /方法體:方法的內(nèi)容 ,方法的定義及修飾字,public | protected | private static final | abstract native synchronized,返回類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個方法不需要返回值時,返回類型為void。 參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組、類或接口),參數(shù)傳遞方式是值傳遞。 方法體是對方法的實現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部。,2、Java中的類、方法和變量 變量定義的語法規(guī)范,class A static void cha
11、nge(String s, StringBuffer sb) s = “aaaa”; /此語句不起作用 sb.setLength(0); sb.append(“aaaa”); public static void main(String args) String s = “bbbb”; StringBuffer sb = new StringBuffer(“bbbb”); change(s, sb); System.out.println(s); System.out.println(sb); ,輸出結(jié)果: bbbb aaaa,2、Java中的類、方法和變量 參數(shù)的傳遞方式是值傳遞,一個簡單的
12、類,class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is : ”+car_number); ,class CarDemo public static void main(String args) Car Democar=new Car(); DemoCar.set_number(3838); DemoCar.show_number(); ,My car No. is : 3838,2、Java
13、中的類、方法和變量 一個簡單的類,(1)對象的生成 通過new操作符生成一個對象;例如: Car demoCar; demoCar = new Car(); (2)對象的構(gòu)造過程 為對象開辟空間,并對對象的成員變量進行缺省的初始化; 對成員變量進行指定的初始化; 調(diào)用構(gòu)造方法。,2、Java中的類、方法和變量 對象,(3)對象的使用 對象的使用是通過一個引用類型的變量來實現(xiàn),包括引用對象的成員變量和方法,通過運算符 可以實現(xiàn)對變量的訪問和方法的調(diào)用。例如: BirthDate date; int day; day = date.day; /引用date的成員變量day date.tomorro
14、w(); /調(diào)用date的方法tomorrow(),2、Java中的類、方法和變量 對象,類的繼承,class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is :”+car_number); ,2、Java中的類、方法和變量 繼承,class TrashCar extends Car int capacity; void set_capacity(int trash_car_capacity) ca
15、pacity=trash_car_capacity; void show_capacity() System.out.println(“My capacity is: ” + capacity); ,2、Java中的類、方法和變量 繼承,Car是父類,TrashCar是子類。TrashCar中繼承了Car中的兩個方法,同時又增加了兩個新方法。,2、Java中的類、方法和變量 繼承,繼承性是面向?qū)ο蟪绦蛟O(shè)計語言的另一基本特征,通過繼承可以實現(xiàn)代碼的復(fù)用。繼承而得到的類為子類,被繼承的類為父類,父類包括所有直接或間接被繼承的類。Java中不支持多重繼承。通過在類的聲明中加入extends子句來創(chuàng)建
16、一個類的子類: class SubClass extends SuperClass 如果缺省extends子句,則該類為java.lang.Object的子類。 子類可以繼承父類中訪問權(quán)限設(shè)定為public、 protected、 default的成員變量和方法,但是不能繼承訪問權(quán)限為private的成員變量和方法。,2、Java中的類、方法和變量 繼承,何時選擇繼承? 一個很好的經(jīng)驗:“B是一個A嗎?” 如果是則讓B做A的子類.,常犯的錯誤A有一個B嗎? 例如讓汽車輪子成為汽車的子類是錯誤的,2、Java中的類、方法和變量 繼承,在更多的時候,組成(聚集)關(guān)系比繼承更能使系統(tǒng)具有高度的靈活性
17、,可維護行,并且提高系統(tǒng)的可重用性。,2、Java中的類、方法和變量 繼承,類方法的覆蓋 方法覆蓋即指在子類中重新定義父類中已有的方法。,class Car int color_number; int door_number; int speed; public void push_break() speed = 0; public void add_oil() ,class Trash_Car extends Car double amount; public void fill_trash() public void push_break() speed = speed 10; ,2、Ja
18、va中的類、方法和變量 覆蓋,覆蓋方法的調(diào)用 對于重寫的方法,Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。,public class DemoCar public static void main( String args ) Car aCar = new Trash_Car( ); aCar. push_break( ); ,在這里, 類Trash_Car中的push_break( )方法將被調(diào)用。,2、Java中的類、方法和變量 覆蓋,方法覆蓋時應(yīng)遵循的原則 (1)覆蓋后的方法不能比被覆蓋的方法有更嚴格的訪問權(quán)限。 (2)覆蓋后的方法不能比被覆蓋的方法產(chǎn)生更多的例外
19、。,2、Java中的類、方法和變量 覆蓋,類方法的重載 方法重載即指多個方法可以享有相同的名字。但是這些方法的參數(shù)必須不同,或者是參數(shù)個數(shù)不同,或者是參數(shù)類型不同。 例如,要打印不同類型的數(shù)據(jù),int, float, String,不需要定義不同名的方法: printInt(int); printFloat(float); printString(String)。 利用方法重載,只需要定義一個方法名:println(),接收不同的參數(shù): println(int); println(float); println(String); StringBuffer vs. ResultSet,2、Jav
20、a中的類、方法和變量 重載,多態(tài)性 類方法的重載是一種多態(tài)性。除此之外,多態(tài)性還可以是指在程序中需要使用父類對象的地方,都可以用子類對象來代替。 例如: public class Employee extends Object public class Manager extends Employee 則: Employee e = new Manager(); /合法語句 通過 instanceof 可以判斷父類引用所引用的對象實例的實際類型。,2、Java中的類、方法和變量 多態(tài)性,可以用方法來實現(xiàn)對成員變量的隱藏: 設(shè)置變量方法:setVariable() 獲取變量方法:getVaria
21、ble(),class Sample protected int x; void setX(int var ) x = var; int getX() return x; ,2、Java中的類、方法和變量 成員變量的隱藏,在Java語言中,提供了操作符instanceof用來判斷對象是否屬于某個類的實例。,public void method (Employee e) if ( e instanceof Manager ) /do something as a Manager else if ( e instanceof Contractor ) /do something as a Cont
22、ractor else /do something else ,2、Java中的類、方法和變量 對象狀態(tài)的確定,2、Java中的類、方法和變量 內(nèi)嵌類(inner class),在一個類的內(nèi)部聲明的類,稱為內(nèi)嵌類。,public class Stack private Vector items; ./code for Stacks methods and constructors not shown. public Enumeration enumerator() return new StackEnum(); class StackEnum implements Enumeration in
23、t currentItem = items.size() - 1; public boolean hasMoreElements() return (currentItem = 0); public Object nextElement() if (!hasMoreElements() throw new NoSuchElementException(); else return items.elementAt(currentItem-); ,內(nèi)嵌類只能在包含它的類中使用,同時它可以看作是該包含類的一段特殊代碼,可以直接使用該包含類的變量和方法。 內(nèi)嵌類編譯后也會形成一個單獨的class,但它
24、附屬于其包含類。,Stack$StackEnum.class,3、Java名字空間及訪問規(guī)則,每個類都擁有自己的名字空間,即指類及其方法和變量可以在一定的范圍內(nèi)知道彼此的存在,可以相互使用。對類而言: abstract類:不能直接產(chǎn)生屬于這個類的對象; final類:不能被其他任何類所繼承(安全的考慮); public類:不但可以被同一程序包(package)中的其它類使用,別的程序包中的類也可以使用; friendly類(缺省,包訪問類):只能被本程序包中的其它類使用,不能被別的程序包中的類使用。,當(dāng)一個類可以被訪問時,對類內(nèi)的成員變量和成員方法而言,其應(yīng)用范圍可以通過施以一定的訪問權(quán)限來限
25、定。 同一個類中 同一個包中 不同包中的子類 不同包中的非子類(任意類) private default protected public ,3、Java名字空間及訪問規(guī)則,3、Java名字空間及訪問規(guī)則,public: 任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。 protected:同一類,同一包可以使用。不同包的類要使用,必須是該類的子類。 private:不允許任何其他類存取和調(diào)用。 friendly(default,前邊沒有修飾字的情況):在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法.,當(dāng)子類中的變量名與父類的相同,父類的變量被遮蓋。,3、J
26、ava名字空間及訪問規(guī)則,3、Java名字空間及訪問規(guī)則 final:到此為止,final在類之前 表示該類是最終類,不能再被繼承。 final在方法之前 表示該方法是最終方法,該方法不能被任何派生的子類覆蓋。 final在變量之前 表示變量的值在初始化之后就不能再改變;相當(dāng)于定義了一個常量。,static 在變量或方法之前,表明它們是屬于類的,稱為類方法(靜態(tài)方法)或類變量(靜態(tài)變量)。若無static修飾,則是實例方法和實例變量。,類變量在各實例間共享,class ABCD char data; static int share_data; class Demo ABCD a,b,c,d;
27、 ,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,類變量的生存期不依賴于對象,相當(dāng)于C語言中全局變量的作用。其它類可以不用通過創(chuàng)建該類的實例,直接通過類名訪問它們。,public class StaticVar public static int number 5; public class OtherClass public void method() int x = StaticVar.number; ,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,static number =5; ,類方法則相當(dāng)于C語言中的全局函數(shù),其他的類也可以直接通過類名來訪問類方法
28、。(Java程序的入口方法main()就是一個類方法),public class GeneralFunction public static int addUp(int x,int y) return x+y; public class UseGeneral public void method() int a = 9; int b =10; int c = GeneralFunction.addUp(a,b); ,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,同一個類的實例方法可以訪問該類的類變量和類方法; 而類方法只能訪問該類的類變量和類方法,不能直接訪問實例的變量和方法。
29、,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,不正確的引用 class StaticError String mystring=“hello”; public static void main(String args) System.out.println(mystring); 編譯時錯誤信息: nonstatic variable mystring cannot be referenced from a static context “System.out.println(mystring);”。 為什么不正確:只有對象的方法可以訪問對象的變量。,3、Java名字空間及訪問
30、規(guī)則 static:類變量和類方法,解決的辦法 1. 將變量改成類變量 class NoStaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); ,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,解決的辦法 2. 先創(chuàng)建一個類的實例 class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticErro
31、r noError; noError = new NoStaticError(); System.out.println(noError.mystring); ,3、Java名字空間及訪問規(guī)則 static:類變量和類方法,4、Java中的抽象類、接口和程序包 抽象類與抽象方法,抽象類:用abstract關(guān)鍵字來修飾一個類時,該類叫做抽象類; 抽象類必須被繼承。 抽象類不能被直接實例化。它只能作為其它類的超類,這一點與最終類(final類)正好相反。 抽象方法:用abstract來修飾一個方法時,該方法叫做抽象方法。 抽象方法必須被重寫 抽象方法只有聲明,不能有實現(xiàn)。 定義了抽象方法的類必須是
32、抽象類。 abstract returnType abstractMethod ( paramlist );,兩個類Circle和Rectangle,完成相關(guān)參數(shù)的計算,class Rectangle public float width,height; Rectangle (float w, float h) width = w; /這里不需this height = h; public float area() return width*height; ,class Circle public float r; Circle(float r) this.r = r; /this指這個對象的
33、 public float area() return 3.14*r*r; ,4、Java中的抽象類、接口和程序包 抽象類與抽象方法,假設(shè)有若干個Circle,以及若干個Rectangle,希望計算它們的總面積,直截了當(dāng)?shù)淖龇ㄊ菍⑺鼈兎謩e放到兩個數(shù)組中,用兩個循環(huán),加上一個加法,這種做法是不漂亮的。 如果還有其它形狀:Triangle,Ellipses等,上述方法顯得“累贅”。我們希望有一種統(tǒng)一的表示,例如用一個數(shù)組shape,接受所有的形狀,然后用: for (i=0; i Collection, List,ArrayList,LinkedList,AbstractCollection,Ab
34、stractList,4、Java中的抽象類、接口和程序包 接口,java.util類包中的一些接口,由于Java編譯器為每個類生成一個字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間。 程序包相當(dāng)于其它語言中的庫函數(shù)。,4、Java中的抽象類、接口和程序包 程序包(類包),打包 Java中用package語句來將一個Java源文件中的類打成一個包。package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。它的格式為: package pkg1.pkg2.pkg3; Java編譯器
35、把包對應(yīng)于文件系統(tǒng)的目錄管理,package語句中,用 . 來指明目錄的層次。,4、Java中的抽象類、接口和程序包 程序包(類包),package myclass.graphics; 這條語句指定這個包中的文件存儲在目錄 path/myclass/graphics 下。 包層次的根目錄path是由環(huán)境變量CLASSPATH來確定的。,package myclass.graphics; class Square ; class Circle ; class Triangle ;,4、Java中的抽象類、接口和程序包 程序包(類包),Square.java,編譯和生成包 在前面Square.ja
36、va中已定義了 myclass.graphics,編譯時可以采用如下方式: javac -d destpath Square.java 則編譯器會自動在destpath目錄下建立子目錄myclass/graphics ,并將生成的.class文件都放到destpath/ myclass/graphics下。 destpath應(yīng)該是環(huán)境變量CLASSPATH中的一個。,4、Java中的抽象類、接口和程序包 程序包(類包),為了能使用Java中已提供的類,我們需要用import語句來引入所需要的類。 import package1.package2.(classname |*); 例如: import myclass.graphics.*; import java.io.*;,由環(huán)境變量CLASSPATH確定,4、Java中的抽象類、接口和程序包 程序包(類包),5、對象的構(gòu)造方法,構(gòu)造方法(Constructor)是一種特殊的方法。Java中的每個類都有構(gòu)造方法,用來
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國臥式煤爐行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國免沖無臭負壓消毒環(huán)保公廁行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國七輥校直機行業(yè)投資前景及策略咨詢研究報告
- 2025-2030年中國畫顏料項目商業(yè)計劃書001
- 關(guān)務(wù)崗面試試題及答案
- 黑龍江哈爾濱市第十九中學(xué)2024屆高三第一次診斷考試(數(shù)學(xué)試題理)試卷
- 郵政工程AI智能應(yīng)用行業(yè)跨境出海戰(zhàn)略研究報告
- 基于K近鄰和優(yōu)化分配策略的密度峰值聚類算法研究
- 石家莊路垚汽車用品有限公司汽車用品生產(chǎn)項目環(huán)評報告
- 中國熱塑性樹脂基復(fù)合材料行業(yè)投資前景分析、未來發(fā)展趨勢研究報告(智研咨詢發(fā)布)
- SolidWorks入門教程(很全面)PPT課件
- 2020飛山景區(qū)旅游開發(fā)運營方案實操手冊
- 環(huán)境工程概預(yù)算(ppt)
- 新舊會計科目對照表
- 醫(yī)用耗材超常預(yù)警和評價制度
- 4S店三表一卡標(biāo)準模板
- 【校本教材】《身邊的化學(xué)》高中化學(xué)校本課程
- 性格色彩培訓(xùn)-團隊培訓(xùn)必備
- 【教學(xué)設(shè)計】審定新北師大版六年級下冊數(shù)學(xué)《圖形的運動》教學(xué)設(shè)計
- 護理敏感質(zhì)量指標(biāo)——疼痛評估正確率
- 某淀粉廠污水處理設(shè)計說明書
評論
0/150
提交評論