第四章+java+中的對象、類、包和接口.ppt_第1頁
第四章+java+中的對象、類、包和接口.ppt_第2頁
第四章+java+中的對象、類、包和接口.ppt_第3頁
第四章+java+中的對象、類、包和接口.ppt_第4頁
第四章+java+中的對象、類、包和接口.ppt_第5頁
已閱讀5頁,還剩145頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1,第四章 java 中的對象、類、包和接口,4.1 初識對象和類 4.2 對象的生命周期 4.3 創(chuàng)建類 4.4 包的創(chuàng)建和使用 4.5 類成員的訪問控制 4.6 類成員與實(shí)例成員 4.7 繼承 4.8 嵌入類 Inner Classes 4.9 接口,2,4.1 初識對象和類,例1. 定義了一個(gè)名為SimplePoint 的類 public class SimplePoint public int x = 0; /x為成員變量 public int y = 0; /y為成員變量 ,第四章 java 中的對象、類、包和接口,3,4.1 初識對象和類,當(dāng)創(chuàng)建一個(gè)新的對象時(shí)(對該類實(shí)例化), 就

2、會(huì)為該對象及其成員分配空間,同時(shí)對成員變量進(jìn)行初始化。,第四章 java 中的對象、類、包和接口,4,4.1 初識對象和類,例2 定義一個(gè)名為SimpleRectangle類 public class SimpleRectangle public int width = 0; public int height = 0; public SimplePoint origin = new SimplePoint(); ,第四章 java 中的對象、類、包和接口,5,4.1 初識對象和類,當(dāng)初始化origin成員時(shí)將調(diào)用代碼new SimplePoint()創(chuàng)建一個(gè)SimplePoint對象。,第四

3、章 java 中的對象、類、包和接口,6,4.1 初識對象和類,例3 public class Point public int x = 0; public int y = 0; / a constructor! public Point(int x, int y) this.x = x; this.y = y; ,new Point(44, 78),第四章 java 中的對象、類、包和接口,7,4.3 創(chuàng)建類,4.3.1 類聲明 4.3.2 類體 (Class Body),第四章 java 中的對象、類、包和接口,8,4.3 創(chuàng)建類,一個(gè)類包括兩部分: 類聲明 類體 見圖:13parts,第

4、四章 java 中的對象、類、包和接口,9,4.3 創(chuàng)建類 4.3.1 類聲明,在類的聲明里,說明了類的名字及其它屬性。下圖說明了類聲明中包含的各部分:,第四章 java 中的對象、類、包和接口,10,4.3 創(chuàng)建類 4.3.1 類聲明,說明: 在類聲明中, public、abstract、final為類的修飾符,是可選的,缺省時(shí)說明所定義的類是非public、非abstract、非final的類。,第四章 java 中的對象、類、包和接口,11,4.3 創(chuàng)建類 4.3.2 類體,類體為該類的對象提供了在生存期內(nèi)需要的所有代碼。包括以下幾部分: 構(gòu)造方法( constructor ) 成員變量

5、( member variable )的聲明 方法(Method)的實(shí)現(xiàn),第四章 java 中的對象、類、包和接口,12,4.3 創(chuàng)建類 4.3.2 類體,1.構(gòu)造方法 定義:類中用來初始化新建的對象的方法稱構(gòu)造方法。 特點(diǎn): 無返回類型, 方法名與類名相同,第四章 java 中的對象、類、包和接口,13,4.3 創(chuàng)建類 4.3.2 類體,1.構(gòu)造方法 說明: 構(gòu)造方法可被重載。 例如: public class Thing private int x; public Thing() x = 47; public Thing( int new_ x) x = new_ x; ,第四章 java

6、 中的對象、類、包和接口,14,4.3 創(chuàng)建類 4.3.2 類體,1.構(gòu)造方法 說明: 其中變量和方法稱為類的成員(成員變量和成員方法),而構(gòu)造方法不是類的成員。 每個(gè)類中至少有一個(gè)構(gòu)造方法。 定義類時(shí)如未定義構(gòu)造方法,運(yùn)行時(shí)系統(tǒng)會(huì)為該類自動(dòng)定義缺省的構(gòu)造方法。 沒有任何參數(shù) 沒有body 不做任何事情,第四章 java 中的對象、類、包和接口,15,4.3 創(chuàng)建類 4.3.2 類體,1.構(gòu)造方法 說明: 構(gòu)造方法只能由new運(yùn)算符調(diào)用 構(gòu)造方法同樣也有訪問權(quán)限的限制 public protected private package,第四章 java 中的對象、類、包和接口,16,4.3 創(chuàng)建

7、類 4.3.2 類體,2.成員變量的聲明 成員變量在類體中聲明,但在構(gòu)造方法和方法之外 。 classDeclaration member variable declarations constructor declarations method declarations ,第四章 java 中的對象、類、包和接口,17,4.3 創(chuàng)建類 4.3.2 類體,2.成員變量的聲明 聲明格式:,第四章 java 中的對象、類、包和接口,18,4.3 創(chuàng)建類 4.3.2 類體,2.成員變量的聲明 說明: accessLevel: 對成員變量的訪問控制,有四級訪問控制:public, protected,

8、 package, private。缺省時(shí)為package。 static: 說明該變量為類變量,缺省時(shí)為實(shí)例變量。 final: 指明該變量的值不能被改變,既該變量為常量。 例 final double AVOGADRO = 6.023e23;,第四章 java 中的對象、類、包和接口,19,4.3 創(chuàng)建類 4.3.2 類體,2.成員變量的聲明 說明: type: 用于說明成員變量的類型??梢允腔緮?shù)據(jù)類型,如int,float,boolean 等,也可以是引用類型,如數(shù)組名,類或接口名。 在同一個(gè)類中不允許有同名的成員變量,但允許成員變量名和方法名相同。,第四章 java 中的對象、類、包

9、和接口,20,4.3 創(chuàng)建類 4.3.2 類體,2.成員變量的聲明 例子: public class SliderDemo public static final int FPS_INIT = 15; private int frameNumber = 0; protected int delay; boolean frozen = false Timer timer; private String name = Fred Flintstone; ,第四章 java 中的對象、類、包和接口,21,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 與類相似,方法的聲明也包括兩部分:方法聲明和方法

10、體:如下圖所示:,第四章 java 中的對象、類、包和接口,22,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 方法聲明: 定義方法的屬性,如訪問控制級,返回值的類型,方法名字,參數(shù)等,第四章 java 中的對象、類、包和接口,23,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 返回值:返回值的數(shù)據(jù)類型必須和聲明中的返回類型一致,或者完全相同,或者是它的一個(gè)子類 。 當(dāng)一個(gè)方法不需要返回值時(shí),返回類型為void。,第四章 java 中的對象、類、包和接口,public Number returnANumber() . . . ,24,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 參

11、數(shù)傳遞: 1)參數(shù)的類型可以是: 簡單數(shù)據(jù)類型:值傳送。方法接收參數(shù)的值,但并不能改變這些參數(shù)的值 引用數(shù)據(jù)類型(數(shù)組類型、類或接口): 地址傳遞。傳遞給方法的是數(shù)據(jù)在內(nèi)存中的地址, 見例題:ArgumentTest.java,第四章 java 中的對象、類、包和接口,25,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 參數(shù)傳遞: 2)參數(shù)的命名: 參數(shù)名字可以與類的成員變量 相同,但參數(shù)名會(huì)隱藏成員。變量為了區(qū)別參數(shù)與類的成員變量,我們必須使用this class Circle int x, y, radius; public Circle(int x, int y, int radiu

12、s) this.x = x; this.y = y; this.radius = radius; ,第四章 java 中的對象、類、包和接口,26,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 方法體: 定義:方法的實(shí)現(xiàn)部分,包括局部變量的聲明和所有合法的java語句。 局部變量:在方法體內(nèi)定義的變量稱局部變量,局部變量的作用域限于方法內(nèi)。如果局部變量的名字和類的成員變量的名字相同,則類的成員變量被隱藏 可以使用this 調(diào)用當(dāng)前類的成員變量。,第四章 java 中的對象、類、包和接口,27,4.3 創(chuàng)建類 4.3.2 類體,3.方法的實(shí)現(xiàn) 例題: class Variable int x

13、=0,y=0,z=0; /class member variables void init( int x, int y ) this.x = x; this.y =y; int z=5; /local variable System.out.println(* in init *); System.out.println(x = +x+ y = +y+ z = +z); ,第四章 java 中的對象、類、包和接口,28,4. 變量的作用域 變量的作用域指明可訪問該變量的一段代碼 按作用域來分,變量可以有下面幾種: 局部變量 Local variable 類變量 Member variable

14、方法參數(shù) Method parameter 例外處理參數(shù) Exception-handler parameter,第四章 java 中的對象、類、包和接口,4.3 創(chuàng)建類 4.3.2 類體,29,4. 變量的作用域,第四章 java 中的對象、類、包和接口,4.3 創(chuàng)建類 4.3.2 類體,30,4.2 對象的生命周期,創(chuàng)建對象 對象的使用 清除對象,第四章 java 中的對象、類、包和接口,31,4.2 對象的生命周期,創(chuàng)建對象 通過創(chuàng)建一個(gè)對象可創(chuàng)建類的一個(gè)實(shí)例, 也稱實(shí)例化此類。 例Rectangle rect = new Rectangle(); 創(chuàng)建一個(gè)對象包括三部分: 聲名部分 實(shí)

15、例化部分 初始化部分,第四章 java 中的對象、類、包和接口,32,4.2 對象的生命周期1. 創(chuàng)建對象,聲名對象 聲明對象的名字和類型,用類名來說明對象的類型。 格式:type name 說明: 聲明對象的規(guī)則與變量聲明規(guī)則相同,但對象變量是引用類型; 在java里類和接口都可以作為數(shù)據(jù)類型來使用; 對象聲明通知編譯器name將用來引用type類型的變量 對象聲明并不創(chuàng)建新的對象。 例: Rectangle rect;,第四章 java 中的對象、類、包和接口,33,4.2 對象的生命周期1. 創(chuàng)建對象,實(shí)例化對象 操作符new通過為新對象分配存儲(chǔ)空間來實(shí)例化類 格式: new 類的構(gòu)造方

16、法 例 new Rectangle(100, 200); Rectangle rect = new Rectangle(100, 200);,第四章 java 中的對象、類、包和接口,34,4.2 對象的生命周期1. 創(chuàng)建對象,初始化對象 每個(gè)類都至少有一個(gè)構(gòu)造函數(shù),當(dāng)創(chuàng)建對象時(shí)調(diào)用指定的構(gòu)造函數(shù)來初始化對象 例 Rectangle rect = new Rectangle(); Rectangle rect = new Rectangle(100, 200); Rectangle rect = new Rectangle(new Point(44,78); 見例題:Rectangle.jav

17、a 注:在定義類時(shí)如未定義構(gòu)造函數(shù)系統(tǒng),java會(huì)自動(dòng)構(gòu)造一個(gè)沒有參數(shù)的構(gòu)造函數(shù)。,第四章 java 中的對象、類、包和接口,35,第四章 java 中的對象、類、包和接口,小結(jié): public class MyDate private int day = 1; private int month = 1; private int year = 2000; public MyDate( int day, int month, int year) . public void print() . public class TestMyDate public static void main( St

18、ring args) MyDate my_ birth = new MyDate( 22, 7, 1964); ,4.2 對象的生命周期1. 創(chuàng)建對象,36,創(chuàng)建一個(gè)類對象: MyDate my_ birth = new MyDate( 22, 7, 1964);,第四章 java 中的對象、類、包和接口,4.2 對象的生命周期1. 創(chuàng)建對象,37,兩個(gè)引用變量的賦值將會(huì)產(chǎn)生如下結(jié)果: int x = 7; int y = x; MyDate s = new MyDate( 22, 7, 1964); MyDate t = s; t = new MyDate( 22, 12, 1964); 兩

19、個(gè)變量指向一個(gè)對象:,第四章 java 中的對象、類、包和接口,4.2 對象的生命周期1. 創(chuàng)建對象,38,當(dāng)t 變量賦予一個(gè)新值時(shí): t = new MyDate(22, 12, 1964); 兩個(gè)變量分別指向兩個(gè)對象:,第四章 java 中的對象、類、包和接口,4.2 對象的生命周期1. 創(chuàng)建對象,39,見例題:Assignment.java 結(jié)果: 1: n1.i: 9, n2.i: 472: n1.i: 47, n2.i: 473: n1.i: 27, n2.i: 27 將一個(gè)對象傳遞到方法內(nèi)部時(shí),也會(huì)產(chǎn)生此現(xiàn)象 見例題:PassObject .java 輸出結(jié)果如下:1: x.c:

20、a2: x.c: z,第四章 java 中的對象、類、包和接口,4.2 對象的生命周期1. 創(chuàng)建對象,40,4.2 對象的生命周期2. 對象的使用,使用對象包括: 從對象中獲得信息 改變對象的狀態(tài) 使對象執(zhí)行某些操作 實(shí)現(xiàn)途徑: 引用對象的變量 調(diào)用對象的方法,第四章 java 中的對象、類、包和接口,41,4.2 對象的生命周期 2. 對象的使用,引用對象的變量 引用對象變量的格式: 對象引用.對象的變量 例: rect.origin = new Point(15, 37); area = rect.height * rect.width; height = new Rectangle().

21、height; 說明: 可以像使用其它變量一樣來使用對象的變量。 例如:area = rect1.height *rect1.width,第四章 java 中的對象、類、包和接口,42,4.2 對象的生命周期 2. 對象的使用,調(diào)用對象的方法 格式: 對象引用.對象方法名(); 或 對象引用.對象方法名(參數(shù)表); 例 rect.move(15, 37); new Rectangle(100, 50).area() 說明: 對于返回值的方法,方法調(diào)用可以用于表達(dá)式中 調(diào)用一個(gè)對象的方法即是向該對象發(fā)送一個(gè)消息.,第四章 java 中的對象、類、包和接口,43,4.2 對象的生命周期3. 清除對

22、象,java運(yùn)行使系統(tǒng)有一個(gè)垃圾回收進(jìn)程負(fù)責(zé)清除不再使用的對象。 垃圾回收器 垃圾回收器定期掃描內(nèi)存,對于被應(yīng)用的對象加上標(biāo)記,按可能的路徑掃描結(jié)束后清除未加標(biāo)記的對象。 被回收的對象是: 不再被任何引用變量引用的對象 引用變量自動(dòng)放棄 人為地將引用變量置為null,第四章 java 中的對象、類、包和接口,44,4.2 對象的生命周期3. 清除對象,垃圾回收器 當(dāng)系統(tǒng)的內(nèi)存用盡或程序中調(diào)用System.gc()要求進(jìn)行垃圾收集時(shí),垃圾收集線程與系統(tǒng)同步運(yùn)行。否則垃圾收集器在系統(tǒng)空閑時(shí)異步地執(zhí)行。,第四章 java 中的對象、類、包和接口,45,4.2 對象的生命周期3. 清除對象,finia

23、lize()方法 在一個(gè)對象被垃圾回收器回收之前,java解釋器會(huì)自動(dòng)調(diào)用對象的finalize()方法。通常在該方法內(nèi)包括了釋放系統(tǒng)資源的代碼段。 finalize( )方法在類java.lang.Object中實(shí)現(xiàn) 如: protected void finalize ( ) throws throwable / clean up code for this class super. finalize( ); /清除對象使用的所有資源,包括由于繼/承關(guān)系而獲得的資源 ,第四章 java 中的對象、類、包和接口,46,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,定義:

24、包是一組相關(guān)的類或接口的集合, 它提供了訪問保護(hù)和名字空間管理。Java編譯器使用文件系統(tǒng)目錄來保存包。,47,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,使用包的好處: 程序員能很容易確定同一包中的類是相互關(guān)聯(lián)的。 程序員能很方便地了解到在哪里可以找到能完成特定功能的類 由于每個(gè)包都創(chuàng)建了一個(gè)名字空間,個(gè)人創(chuàng)建的類名不會(huì)和其它包中的類名名發(fā)生沖突 可以使同一包中的類彼此不加限制地訪問,而同時(shí)對其它包中的類提供訪問控制。,48,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,1. 創(chuàng)建包 格式:package pkg1.pkg2.pkg3; packag

25、e語句必須放在原文件的開始處。 例如: java.io java.util java.lang java.applet javax.swing package graphics; public class Circle . . . ,49,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,1. 創(chuàng)建包 說明: package的作用域是整個(gè)源文件 如果在同一個(gè)源文件中定義了多個(gè)類,最多僅可以有一個(gè)類用public修飾,且源文件名必須與該類名相同 當(dāng)未使用package語句時(shí), 類和接口放在無名缺省包里 包的命名習(xí)慣:將Internet域名作為包名 例如:pany.region.p

26、ackage.,50,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,2. 包的使用 包中的所有類中只有public類能被包外部的類訪問。 有三種方法訪問包中的類: 1) 使用長名字引用包中的公共成員 即在類名前注明包名 例 graphics.Rectangle graphics.Rectangle myRect = new graphics.Rectangle();,51,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,2. 包的使用 引進(jìn)包的公共成員 在文件的開始處使用import語句將指定的成員引進(jìn)到當(dāng)前文件中. 格式: import pkg1.pkg

27、2.類名 例 import graphics.Circle; Circle myCircle = new Circle();,52,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,2. 包的使用 3) 引進(jìn)整個(gè)包 使用import語句引進(jìn)包中的所有類和接口 格式: import pkg1.pkg2.* 例 import graphics.*; 現(xiàn)在可以使用短名字來引用類graphics包中的所有類. Circle myCircle = new Circle(); Rectangle myRectangle = new Rectangle();,53,4.4 包的創(chuàng)建和使用,第

28、四章 java 中的對象、類、包和接口,3. 源文件和類文件的管理 JDK利用文件系統(tǒng)的層次結(jié)構(gòu)來管理源文件和類文件。源文件和類文件所在的目錄名應(yīng)與其中的類所在的包名對應(yīng),編譯器和解釋器按此機(jī)制來查找類。如:,54,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,3. 源文件和類文件的管理,55,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,3. 源文件和類文件的管理 當(dāng)源文件中有多個(gè)類定義時(shí),編譯后將產(chǎn)生多個(gè)類文件。,56,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,3. 源文件和類文件的管理 雖然類文件所在的目錄序列必須與包名對應(yīng)

29、,但不一定與源文件在相同的目錄中。,javac d d:classes Rectangle.java,57,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和接口,3. 源文件和類文件的管理 (簡單模式) 說明: 將主文件放在一個(gè)目錄下:d:testpackageLibTest.java 注意不是: d:testpackagec05LibTest.java 2)在d:testpackage下建立目錄: D:testpackagecombruceeckelutilVector.java 注意:是Vector.java,不是vector.java.,58,簡單模式,直接在d:testpa

30、ckage下編譯:javac d . LibTest.java 注意:javac LibTest.java 可以編譯通過,但不能運(yùn)行。 直接在d:testpackage下運(yùn)行:java c05.LibTest,59,簡單模式(續(xù)),在c:下如何編譯運(yùn)行 Javac d d:temp sourcepath e:testpath e:testpathLibTest.java 注意:-sourcepath后的目錄不是:e:testpathcombruceeckelutil 運(yùn)行:java classpath d:temp c05.LibTest 注意:不是:java d:tempc05LibTest

31、,60,復(fù)雜模式,在d:test下放:D:testpackageLibTest.java 在e:testpath下放e:testpathcombruceeckelutilVector.java 在d:test目錄下編譯和運(yùn)行: javac d . sourcepath e:testpath LibTest.java 運(yùn)行: Java c05.LibTest 不是:java classpath e:testpath c05.LibTest 但在c:下運(yùn)行就需要-classpath了。,61,最復(fù)雜的情況: LibTest.java在e:testpackage下,com在d:test目錄下: 在c

32、:tools下進(jìn)行調(diào)試。 javac -d c:setup sourcepath e:testpackage classpath c:setup e:testpackageLibTest.java,62,使用包時(shí),javac必須使用“-d”且其源路徑一定要使用絕對路徑d:testsources(在任何目錄下),或使用相對路徑(在當(dāng)前目錄下)如果類文件和原文件在同一個(gè)目錄下,則用”.”。格式為: javac d 類文件路徑(或 “.”)(絕對或相對),愿文件路徑(絕對 或相對),63,使用 import時(shí),一定要加上”-classpath”(后跟路徑),然后再加上”-d”(后跟類路徑,再后源文件

33、的路徑)。 使用包時(shí),java 命令可以使用”-classpath”(不設(shè)置CLASSPATH)時(shí),設(shè)置CLASSPATH時(shí),就不使用。在“-classpath”指定的目錄下,也不使用該選項(xiàng)。,64,使用包時(shí),java 命令必須在”-classpath”指定的以上目錄,以下無論如何也不執(zhí)行。 包對應(yīng)于文件系統(tǒng)的目錄管理方式可以幫助編譯器和解釋器找到程序中的類和接口存放的地方。 CLASSPATH指出用戶的類庫所在目錄,在類路徑(CLASSPATH)中只需指出包路徑之上的頂層路徑 CLASSPATH= . ; d:classes,65,4.4 包的創(chuàng)建和使用,第四章 java 中的對象、類、包和

34、接口,3. 源文件和類文件的管理 設(shè)置類路徑的方法 設(shè)置環(huán)境變量CLASSPATH(不推薦) set classpath=.;d:classes 在調(diào)用編譯器或解釋器時(shí)使用-classpath選項(xiàng) 例 java -classpath d:classes com.taranis.grathpics.Test 見例子:包的使用.txt,66,java classpath d:packagetest c05.LibTest d:packagetest 是Main函數(shù)所在的文件所在的目錄(很多人都任為是Import指向的文件所放的目錄) 在java命令中是不用指明Import所指向文件的路徑,如果在所

35、有的類文件基于同同一個(gè)根目錄,否則用classpath. 在d:temp: java classpath e:testpackagesource(import 指向類文件根目錄); e:lecture(main所在的類的跟目錄) c05.LibTest 只有javac中才考慮import所指向的文件的路徑.,67,但是javac也不考慮,因?yàn)樗笠欢ㄒ袸mport文件所指向的文件的根目錄(import .*,com目錄)放在main函數(shù)所在文件的同一個(gè)目錄下. 而且編譯的時(shí)候,一定要把目錄放到main函數(shù)所在的目錄,否則,找不到com. 否則要使用-sourcepath.(在d:temp目

36、錄下. javac d d:classes sourcepath e:testpackagesource LibTest.java 只有在-d 后面加上-classpath 才能在-d 后的路徑中創(chuàng)建import指向的路徑的類文件.,68,4.5 類成員的訪問控制,在java語言中對類的成員有四種級別的訪問控制:private, protected, public, package. 如定義類時(shí)未指定訪問控制說明符,則其訪問控制級別為package。,第四章 java 中的對象、類、包和接口,69,4.5 類成員的訪問控制,第四章 java 中的對象、類、包和接口,例題見:訪問權(quán)限.txt,7

37、0,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,在類中聲明一個(gè)變量或方法時(shí),還可以指定它為實(shí)例成員或類成員。如下的格式: static type classVar; static returnType classMethod ( paramlist ) ,71,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,類變量與實(shí)例變量 二者區(qū)別: 運(yùn)行時(shí)系統(tǒng)在首次遇到類變量時(shí)就為類變量存儲(chǔ)空間;而當(dāng)創(chuàng)建類的實(shí)例對象時(shí)才為實(shí)例變量分配存儲(chǔ)空間。 不管有多少類的實(shí)例,類變量只有一份拷貝,即所有實(shí)例共享相同的類變量;而每個(gè)實(shí)例對象都有自己的實(shí)例變量。 實(shí)例變量只能通

38、過對象來訪,而類變量既可以通過類名來訪問,也可以通過實(shí)例對象來訪問。,72,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,類方法與實(shí)例方法 二者區(qū)別: 實(shí)例方法即能訪問當(dāng)前對象的實(shí)例變量也能訪問類變量;類方法只能訪問類變量而不能訪問實(shí)例變量。 實(shí)例方法只能由實(shí)例對象來調(diào)用而類方法即可以由實(shí)例對象調(diào)用也可以由類名直接調(diào)用。 見例題:MemberTest.java,73,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,說明: 可用static來定義全局變量和全局方法,這時(shí)由于類成員仍然封裝在類中,與C、C+相比,可以限制全局變量和全局方法的使用范圍而防止沖

39、突。 一個(gè)類的main( )方法必須要用static來修飾,也是因?yàn)镴ava運(yùn)行時(shí)系統(tǒng)在開始執(zhí)行一個(gè)程序前,并沒有生成類的一個(gè)實(shí)例,它只能通過類名來調(diào)用main( )方法作為程序的入口。 通常,static與final一起使用來指定一個(gè)常量 如:protected static final String DISABLE = disable;,74,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,初始化類變量和實(shí)例變量 (Instance and Class Members) 可以在類中聲明的時(shí)候初始化 class BedAndBreakfast static final i

40、nt MAX_CAPACITY = 10; /類變量 boolean full = false; float f = 3.14f; Depth o = new Depth(); /引用類型 int i = f(); /通過調(diào)用一個(gè)方法來提供初始值 ,75,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,初始化類變量和實(shí)例變量 實(shí)例變量:在構(gòu)造方法中進(jìn)行初始化。 class Counter int i;Counter(j) i = j; / . . .,76,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,初始化類變量和實(shí)例變量 類變量:類初始塊中進(jìn)行初始

41、化。 class Spoon static int i; static i = 47; / . . . 這段代碼僅執(zhí)行一次首次生成那個(gè)類的一個(gè)對象時(shí),或者首次訪問屬于那個(gè)類的一個(gè)static成員時(shí)(即便從未生成過那個(gè)類的對象)。 見例題:ExplicitStatic.java,77,4.6 類成員與實(shí)例成員,第四章 java 中的對象、類、包和接口,初始化類變量和實(shí)例變量 說明: 類初始塊不能在任何方法內(nèi)。 類初始塊只執(zhí)行一次,78,4.7 繼 承,第四章 java 中的對象、類、包和接口,4.7.1 理解繼承 4.7.2 類 jave.lang.Object 4.7.3 final類和方法

42、4.7.4 abstract類和方法,79,4.7 繼 承4.7.1 理解繼承,父類、子類和繼承 成員變量的隱藏和方法的重寫 super關(guān)鍵字 方法的重載 運(yùn)行時(shí)多態(tài) instanceof 操作符,第四章 java 中的對象、類、包和接口,80,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,父類、子類和繼承 例子:,81,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,父類、子類和繼承 定義: 子類:繼承而得到的類為子類 。子類繼承父類的狀態(tài)和行為,同時(shí)也可以修改父類的狀態(tài)或重寫父類的行為,并添加新的狀態(tài)和行為 父類:被繼承的類為父

43、類,父類包括所有直接或間接被繼承的類,82,4.7 繼 承4.7.1 理解繼承,父類、子類和繼承 Java語言是單繼承機(jī)制 ,不支持多重繼承 單繼承是代碼更加可靠。 接口可以提供多繼承功能。,第四章 java 中的對象、類、包和接口,83,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,交通工具,汽車,卡車,旅行車,小汽車,轎車,跑車,面包車,父類、子類和繼承,84,4.7 繼 承4.7.1 理解繼承,父類、子類和繼承 Java中,所有的類都是通過直接或間接地繼承java.lang.Object得到的,第四章 java 中的對象、類、包和接口,85,4.7 繼 承

44、4.7.1 理解繼承,父類、子類和繼承 創(chuàng)建子類 通過在類的聲明中加入extends子句來創(chuàng)建一個(gè)類的子類,其格式如下: class SubClass extends SuperClass 說明:如果缺省extends子句,則該類為java.lang.Object的子類,第四章 java 中的對象、類、包和接口,86,4.7 繼 承4.7.1 理解繼承,父類、子類和繼承 子類能夠繼承什么? 子類能夠繼承父類中public和protected的成員。 子類能夠繼承父類中沒有訪問控制的成員,只要子類和父類在同一個(gè)包內(nèi)。 子類不能繼承父類隱藏的成員變量和重寫的父類方法 子類不能繼承父類中privat

45、e成員。 子類不能繼承父類中構(gòu)造方法。因?yàn)闃?gòu)造方法不是類的成員,第四章 java 中的對象、類、包和接口,87,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,成員變量的隱藏和方法的重寫 變量的隱藏:子類中聲明了和父類同名的變量,父類的成員變量被隱藏。 方法的重寫:子類中定義了與父類相同的方法, 則父類的方法被重寫。,88,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,成員變量的隱藏和方法的重寫 例題: class SuperClass int x; void setX( ) x = 0; ,class SubClass exten

46、ds SuperClass int x; /hide x in SuperClass void setX( ) /overload x = 5; ,89,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類、包和接口,成員變量的隱藏和方法的重寫 說明: 重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數(shù)表和相同的返回類型 子類通過成員變量的隱藏和方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為,90,4.7 繼 承4.7.1 理解繼承,例題:方法的重寫,第四章 java 中的對象、類、包和接口,91,4.7 繼 承4.7.1 理解繼承,第四章 java 中的對象、類

47、、包和接口,成員變量的隱藏和方法的重寫 說明: 子類中不能重寫父類中的final method 子類中必須重寫父類中的abstract method, 否則子類也為抽象類。,92,4.7 繼 承4.7.1 理解繼承,3. super 關(guān)鍵字 super用來引用當(dāng)前對象的父類, super來實(shí)現(xiàn)對父類成員的訪問。 應(yīng)用: 子類在隱藏了父類的成員變量或重寫了父類的方法后,常常還要用到父類的成員 在重寫的方法中使用父類中被重寫的方法以簡化代碼的編寫,第四章 java 中的對象、類、包和接口,93,4.7 繼 承4.7.1 理解繼承,3. super 關(guān)鍵字 super的使用有三種情況: 用來訪問父類

48、被隱藏的成員變量,如:super.variable 用來調(diào)用父類中被重寫的方法,如: super.Method ( paramlist ); 用來調(diào)用父類的構(gòu)造函數(shù),如 super( paramlist ); 例題:inheritance.java,Manager.java,第四章 java 中的對象、類、包和接口,94,4.7 繼 承4.7.1 理解繼承,3. super 關(guān)鍵字 說明: 用來調(diào)用父類的構(gòu)造函數(shù)super( paramlist )必須放在子類構(gòu)造方法的句首。 如果子類沒有明確的調(diào)用父類的構(gòu)造函數(shù),編譯器會(huì)自動(dòng)的調(diào)用super()語句,它調(diào)用父類的默認(rèn)構(gòu)造函數(shù)。 如果父類沒有默

49、認(rèn)構(gòu)造函數(shù)則編譯出錯(cuò)。 例題:Manager1.java,第四章 java 中的對象、類、包和接口,95,4.7 繼 承4.7.1 理解繼承,4. 方法的重載(overloading) 在同一個(gè)類中名字相同但參數(shù)個(gè)數(shù)或類型不同的方法。返回值可以不同。 例如: public void println( int i) public void println( float f) public void println( String s) 見例題 MethodOverloadingTest.java,第四章 java 中的對象、類、包和接口,96,4.7 繼 承4.7.1 理解繼承,4. 方法的重載

50、(overloading) 構(gòu)造方法也可以重載??梢栽跇?gòu)造方法的第一條語句使用this來調(diào)用其他的構(gòu)造方法。 見例題 Employee.java,第四章 java 中的對象、類、包和接口,97,4.7 繼 承4.7.1 理解繼承,5. 運(yùn)行時(shí)多態(tài) 對于重寫或繼承的方法,Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類型來決定選擇哪個(gè)方法調(diào)用。,第四章 java 中的對象、類、包和接口,98,4.7 繼 承4.7.1 理解繼承,說明: 對子類的一個(gè)實(shí)例,如果子類重寫了父類的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類的方法, 如果子類繼承了父類的方法(未重寫),則運(yùn)行時(shí)系統(tǒng)調(diào)用父類的方法。,第四章 java 中的對象、

51、類、包和接口,99,4.7 繼 承4.7.1 理解繼承,5. 運(yùn)行時(shí)多態(tài) class A void callme( ) System.out.println(Inside As callme( ) method); class B extends A void callme( ) System.out.println(Inside Bs callme( ) method); public class Dispatch public static void main( String args ) A a = new B( ); a.callme( ); ,第四章 java 中的對象、類、包和接口

52、,運(yùn)行結(jié)果為: C:java Dispatch Inside Bs callme( ) method,例題:,100,4.7 繼 承4.7.1 理解繼承,5. 運(yùn)行時(shí)多態(tài),第四章 java 中的對象、類、包和接口,例題:,class Student public: / float calcTuition() / ; class GraduateStudent extends Student public: / float calcTuition() / ;,void fn(Student x) x.calcTuition(); void main() Student s=new Student

53、(); GraduateStudent gs=new GraduateStudent() ; fn(s); fn(gs); ,101,4.7 繼 承4.7.1 理解繼承,例題:Shapes.java 為什么要上溯到父類呢? 我們可以從以下例題中找到答案: 在程序中,如果一個(gè)類包含了自己,它就可以在任何地方代替自己 例題:music.java 例題:music1.java,第四章 java 中的對象、類、包和接口,102,4.7 繼 承4.7.1 理解繼承,6. instanceof 操作符 用來判斷對象屬于哪個(gè)類,第四章 java 中的對象、類、包和接口,public class Employ

54、ee extends Object public class Manager extends Employee public class Engineer extends Employee - - public void doSomething( Employee e) if (e instanceof Manager) / Process a Manager else if (e instanceof Engineer) / Process an Engineer else / Process any other type of Employee ,例如:,103,4.7 繼 承4.7.2

55、類 jave.lang.Object,第四章 java 中的對象、類、包和接口,類java.lang.Object處于Java開發(fā)環(huán)境的類層次樹的根部,其他所有的類都直接或間接地為它的子類 一個(gè)類如果沒有聲明繼承某個(gè)類,則默認(rèn)繼承Object類。 public class Employee . 等價(jià)于: public class Employee extends Object . ,104,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java 中的對象、類、包和接口,該類定義了一些所有對象最基本的狀態(tài)和行為常用的有: equals() getClass toStri

56、ng finalize notify notifyAll wait,105,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java 中的對象、類、包和接口,equals() 一般情況下需要覆蓋Object中的equals()方法 例如: Integer one = new Integer (1), anotherOne = new Integer (1); if (one.equals (anotherOne) System.out.println (“objects are equal”); if (one = = anotherOne) System.out.pr

57、intln (“objects are equal”); else System.out.println (“objects are equal”);,106,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java 中的對象、類、包和接口,2. getClass() getClass ( )方法是final方法,它不能被重寫。它返回一個(gè)對象在運(yùn)行時(shí)所對應(yīng)的類的表示 例如下面的方法得到并顯示對象的類名: void PrintClassName( Object obj ) System.out.println(“ The objects class is “ + obj.

58、getClass( ).getName( ) ); ,107,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java 中的對象、類、包和接口,2. getClass() 可以用getClass創(chuàng)建一個(gè)類的實(shí)例,而不必在編譯時(shí)即知道到底是哪個(gè)類。 下例創(chuàng)建了一個(gè)與對象obj具有相同類型的一個(gè)實(shí)例, 所創(chuàng)建的對象可以是任何類。 Object creatNewInstanceOf (object obj) return obj.getClass( ).newInstance( ); ,108,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java

59、中的對象、類、包和接口,3. toString( ) toString( )方法用來返回對象的字符串表示.不同的對象顯示的形式也不一樣。 例如: System.out.println(Thread.currentThread().toString(); 顯示結(jié)果為:Threadmain,5,main int pInt = 500; Integer wInt = new Integer( pInt); System.out.println(wInt.toString(); 顯示結(jié)果為:500,109,4.7 繼 承4.7.2 類 jave.lang.Object,第四章 java 中的對象、類、包和接口,類java.lang.Object處于Java開發(fā)環(huán)境的類層次樹的根部,其他所有的類都直接或間接地為它的子類 一個(gè)類如果沒有聲明繼承某個(gè)類,則默認(rèn)繼承Object

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論