java程序設(shè)計(jì)之網(wǎng)絡(luò)編程第二版課后習(xí)題答案_第1頁(yè)
java程序設(shè)計(jì)之網(wǎng)絡(luò)編程第二版課后習(xí)題答案_第2頁(yè)
java程序設(shè)計(jì)之網(wǎng)絡(luò)編程第二版課后習(xí)題答案_第3頁(yè)
java程序設(shè)計(jì)之網(wǎng)絡(luò)編程第二版課后習(xí)題答案_第4頁(yè)
java程序設(shè)計(jì)之網(wǎng)絡(luò)編程第二版課后習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章 習(xí)題及思考題1、 Java程序是由什么組成的?一個(gè)程序中必須有public類嗎?Java源文件的命名規(guī)則是怎樣的?答:一個(gè)Java源程序是由若干個(gè)類組成。一個(gè)Java程序不一定需要有public類:如果源文件中有多個(gè)類時(shí),則只能有一個(gè)類是public類;如果源文件中只有一個(gè)類,則不將該類寫成public也將默認(rèn)它為主類。源文件命名時(shí)要求源文件主名應(yīng)與主類(即用public修飾的類)的類名相同,擴(kuò)展名為.java。如果沒(méi)有定義public類,則可以任何一個(gè)類名為主文件名,當(dāng)然這是不主張的,因?yàn)樗鼘o(wú)法進(jìn)行被繼承使用。另外,對(duì)Applet小應(yīng)用程序來(lái)說(shuō),其主類必須為public,否則雖然在

2、一些編譯編譯平臺(tái)下可以通過(guò)(在BlueJ下無(wú)法通過(guò))但運(yùn)行時(shí)無(wú)法顯示結(jié)果。 2、怎樣區(qū)分應(yīng)用程序和小應(yīng)用程序?應(yīng)用程序的主類和小應(yīng)用程序的主類必須用public修飾嗎?答:Java Application是完整的程序,需要獨(dú)立的解釋器來(lái)解釋運(yùn)行;而Java Applet則是嵌在HTML編寫的Web頁(yè)面中的非獨(dú)立運(yùn)行程序,由Web瀏覽器內(nèi)部包含的Java解釋器來(lái)解釋運(yùn)行。在源程序代碼中兩者的主要區(qū)別是:任何一個(gè)Java Application應(yīng)用程序必須有且只有一個(gè)main方法,它是整個(gè)程序的入口方法;任何一個(gè)Applet小應(yīng)用程序要求程序中有且必須有一個(gè)類是系統(tǒng)類Applet的子類,即該類頭部

3、分以extends Applet結(jié)尾。應(yīng)用程序的主類當(dāng)源文件中只有一個(gè)類時(shí)不必用public修飾,但當(dāng)有多于一個(gè)類時(shí)則主類必須用public修飾。小應(yīng)用程序的主類在任何時(shí)候都需要用public來(lái)修飾。3、開(kāi)發(fā)與運(yùn)行Java程序需要經(jīng)過(guò)哪些主要步驟和過(guò)程?答:主要有三個(gè)步驟(1)、用文字編輯器notepad(或在Jcreator,Gel, BuleJ,Eclipse, Jbuilder等)編寫源文件; (2)、使用Java編譯器(如Javac.exe)將.java源文件編譯成字節(jié)碼文件.class; (3)、運(yùn)行Java程序:對(duì)應(yīng)用程序應(yīng)通過(guò)Java解釋器(如java.exe)來(lái)運(yùn)行,而對(duì)小應(yīng)用

4、程序應(yīng)通過(guò)支持Java標(biāo)準(zhǔn)的瀏覽器(如Microsoft Explorer)來(lái)解釋運(yùn)行。4、安裝JDK之后如何設(shè)置JDK系統(tǒng)的PATH,CLASSPATH?他們的作用是什么?答、更新系統(tǒng)PATH的方法隨Windows版本不同而不同。對(duì)于Windows 95/98,可以將下列項(xiàng)目作為C:autoexec.bat文件的最后一行:SET PATH = C:j2sdk1.4.2bin;%PATH%當(dāng)程序需要第三方的類庫(kù)支持, 而且比較常用, 就可以采用此種方法.比如常用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序, 寫 servlet 需要的 servlet 包等等. 設(shè)置方法就是在環(huán)境變量中加入 CLASSPATH. 然后就可

5、以直接編譯運(yùn)行了.Java運(yùn)行環(huán)境從CLASSPATH環(huán)境變量中尋找要執(zhí)行的用戶項(xiàng)目(三方的類庫(kù))??梢园慈缦碌姆绞皆O(shè)置SET CLASSPATH=.;C:J2SDK1.4.2jrelibjaws.jar;%CLASSPATH%通常我們要從當(dāng)前目錄中尋找用戶類,因?yàn)殚_(kāi)發(fā)的程序相關(guān)的類放在這里,. 表示當(dāng)前工作目錄. 5、Java語(yǔ)言特點(diǎn)是什么?答:Java是一種簡(jiǎn)單的面象對(duì)象的分布式的解釋的健壯的安全的結(jié)構(gòu)中立的可移植的性能很優(yōu)異的多線程的動(dòng)態(tài)的語(yǔ)言。6、簡(jiǎn)述面向過(guò)程問(wèn)題求解和面向?qū)ο髥?wèn)題求解的異同。試列舉出面向?qū)ο蠛兔嫦蜻^(guò)程的編程語(yǔ)言各兩種。解:面向過(guò)程問(wèn)題求解利用計(jì)算機(jī)能夠理解的離散邏輯來(lái)

6、描述和表達(dá)所求解的問(wèn)題本身以及具體問(wèn)題解決的過(guò)程,它的核心是算法和數(shù)據(jù)結(jié)構(gòu),面向?qū)ο蟮膯?wèn)題求解則利用符合人們?nèi)粘K季S習(xí)慣的方式去模擬所求解的問(wèn)題,模擬它的構(gòu)成、特征和各種動(dòng)態(tài)行為,從而得到問(wèn)題的解答。它的核心是類、對(duì)象和設(shè)計(jì)模式。常見(jiàn)的面向過(guò)程的編程語(yǔ)言有BASIC,F(xiàn)ORTRAN,Pascal, C等。常見(jiàn)的面向?qū)ο蟮木幊陶Z(yǔ)言有Smalltalk-80,Object Pascal, C+, Java等。第二章 習(xí)題及思考題 1.試分析基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的基本特點(diǎn)?答:Java的基本數(shù)據(jù)類型都有固定的數(shù)據(jù)位,不隨運(yùn)行平臺(tái)的變化而變化。引用類型都是用類或?qū)ο髮?shí)現(xiàn)的2.請(qǐng)使用異或運(yùn)算符,

7、實(shí)現(xiàn)兩個(gè)整數(shù)的交換。 答:int x=5,y=19; x=xy; y=yx; x=xy;3.下列哪個(gè)是合法的標(biāo)識(shí)符:( )。A、a=bB、_HelloC、2ndD、Chong qing 答:B4.下列哪些是合法的標(biāo)識(shí)符()。 A、newB、classC、intD、const2 答:D5.如果定義有變量double d1, d2=4.0則下列說(shuō)法正確的是:A、變量d1,d2均初始化為4.0B、變量d1沒(méi)有初始化,d2初始化為4.0C、變量d1,d2均未初始化D、變量d2沒(méi)有初始化,d1初始化為4.0答:B6.判斷題:所有的變量在使用前都必須進(jìn)行初始化。( ) 答:正確。7.內(nèi)部數(shù)據(jù)類型byte的

8、取值范圍是:( ) A、065, 535B、(-128)127C、(-32,768)32,767D、(-256)255答:B8.下列哪些是不能通過(guò)編譯的語(yǔ)句:( ) A、int i = 32;B、float f = 45.0;C、double d = 45.0;D、char a=c;答: B9.判斷題:Java中數(shù)據(jù)類型的長(zhǎng)度與具體使用的機(jī)器相關(guān)。( ) 答:錯(cuò)誤。10.如果定義有double x;float y;int m,則表達(dá)式x*y-m的類型為( ):A、doubleB、floatC、intD、short答:A11.如果定義有short s;byte b;char c,則表達(dá)式s*b+

9、c的類型為( ):A、charB、shortC、intD、byte答:C12.已知int i= 2147483647; +i; 則i的值等于多少( ) A -2147483648 B 2147483647 C 2147483648 答:A13.已知byte i= 127; +i; 則i的值等于多少( ) A -128 B 127 C 128 答:A14.已知byte i= 127; i=i+1;這兩行語(yǔ)句能否編譯成功?( ) 答:編譯不成功。15.執(zhí)行以下程序段int a=5,b; b=+a*3后b的值為:( )A、17B、18C、16D、15答: B16.如果x=3,y=5,則表達(dá)式x|y的

10、值為:( )A、15B、8C、1D、7答:D17.如果int a=3,b=2,則執(zhí)行a*=b+8后a的值為:( )A、20B、14C、30D、16答:C18.若所用變量都已正確定義,以下選項(xiàng)中,非法的表達(dá)式是:( )A、a!=4|b=1B、a%3C、a=1/2D、A+32答:C19.設(shè)有定義語(yǔ)句int a=1,1,2; 則以下對(duì)此語(yǔ)句的敘述錯(cuò)誤的是( )。 A、定義了一個(gè)名為a的一維數(shù)組 B、a數(shù)組有3個(gè)元素 C、a數(shù)組的下標(biāo)為13 D、數(shù)組中的每個(gè)元素是整型答:C20.以下數(shù)組初始化形式正確的是:( ) A、int t1=1,2,3,4,5,6 B、int t2=1,2,3,4,5,6 C、

11、int t332=1,2,3,4,5,6 D、int t4;t4=1,2,3,4,5,6答:A第三章 習(xí)題及思考題1、編寫一個(gè)程序,用選擇法對(duì)數(shù)組a=20,10,55,40,30,70,60,80,90,100進(jìn)行從大到小的排序解: public class ArraySortpublic static void main(String args)int array=20,10,55,40,30,70,60,80,90,100;int i,j,k,t;int m=array.length;for(i=0;im-1;i+)k=i;for(j=i+1;jm;j+)if(arrayjarrayk)

12、k=j;t=arrayk;arrayk=arrayi;arrayi=t;for(i=0;iarray.length;i+)System.out.println(array+i+=+arrayi);2、求兩個(gè)整數(shù)的最大公約數(shù)解public class Gcd_do public static void main(String args) int a=45,b=21,k=0; System.out.print(Gcd(+a+,+b+)=); do k = a % b; a = b; b = k; while (k!=0); System.out.println(a); 3、請(qǐng)打印出如下九九乘法表*

13、 | 1 2 3 4 5 6 7 8 9-|- 1 | 1 2 | 2 4 3 | 3 6 9 4 | 4 8 12 16 5 | 5 10 15 20 25 6 | 6 12 18 24 30 36 7 | 7 14 21 28 35 42 49 8 | 8 16 24 32 40 48 56 64 9 | 9 18 27 36 45 54 63 72 81解:public class MultiTable public static void main(String args) int i,j,n=9; System.out.print( * |); for (i=1;i=n;i+) Sy

14、stem.out.print( +i); System.out.print(n-|); for (i=1;i=n;i+) System.out.print(-); System.out.println(); for (i=1;i=n;i+) System.out.print( +i+ |); for (j=1;j=0?disc:-disc; p2=Math.sqrt(absdisc)/(2.0*a); if(disc0.0) System.out.println(Complex roots:+p1+or-+p2+i); else x1=p1+p2; x2=p1-p2; System.out.p

15、rintln(First Real roots:+x1); System.out.println(Second real roots:+x2); / endfor 5、求前40個(gè)Fibonacci數(shù)列。 Fibonacci數(shù)列:1,1,2,3,5,8,13,21,34, 從數(shù)列看到:F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3) 解:public class Fibonacci public static void main(String args) long f1,f2; int i; f1=1; f2=1; System.out.println (f1+ +

16、f2); for (i=3;i=20;i+) f1=f1+f2; f2=f1+f2; System.out.println (f1+ +f2); 6、已知公雞5元1只,母雞3元一只,小雞1元3只,要求用100元?jiǎng)偤觅I100只雞,問(wèn)有多少種采購(gòu)方案。解:public class Loop_Loop3_20 public static void main(String args) int I,J,K; System.out.println( I J K ); for (I=0;I=20;I+ ) / I 為公雞數(shù) for ( J=0;J0) str=args0; System.out.printl

17、n(str=+str); n=str.length(); char ch1,ch2; String temp=; for (i=0;in;i+) sub1=str.substring(i,i+1); temp=sub1+temp; System.out.println(temp=+temp); System.out.println(str+“ :”+str.equals(temp); 8、求2-1000內(nèi)的所有素?cái)?shù)class prime public static void main(String args) int sum=0,i,j; for( j=2;j=1000;j+) /求50以內(nèi)的

18、素?cái)?shù) for( i=2;ij/2) System.out.println(+j+是素?cái)?shù)); 9、在一個(gè)循環(huán)中使用break,continue和return有什么不同?解:在循環(huán)中使用break語(yǔ)句,將使循環(huán)終止,流程從break語(yǔ)句處跳轉(zhuǎn)到break語(yǔ)句所在的循環(huán)外面的第一個(gè)語(yǔ)句繼續(xù)執(zhí)行。在循環(huán)中使用continue語(yǔ)句,將提前結(jié)束本輪循環(huán),流程跳轉(zhuǎn)到continue語(yǔ)句所在循環(huán)的第一個(gè)語(yǔ)句繼續(xù)執(zhí)行。在循環(huán)中使用return語(yǔ)句,將終止當(dāng)前方法調(diào)用,同時(shí)終止循環(huán),使流程返回到調(diào)用語(yǔ)句的下一個(gè)語(yǔ)句執(zhí)行。10、結(jié)構(gòu)化程序設(shè)計(jì)有哪三種流程?他們分別對(duì)應(yīng)Java中那些語(yǔ)句解:結(jié)構(gòu)化程序設(shè)計(jì)有三種基本流

19、程:循環(huán)、分支和順序。Java程序中的分支語(yǔ)句包含if語(yǔ)句、switch語(yǔ)句;循環(huán)語(yǔ)句包括了while語(yǔ)句,do-while語(yǔ)句、for語(yǔ)句;其他語(yǔ)句如變量、對(duì)象定義、賦值語(yǔ)句、方法調(diào)用語(yǔ)句、以及上面的循環(huán)結(jié)構(gòu)、分支結(jié)構(gòu)等按照上下文排列都是順序語(yǔ)句。第四章 習(xí)題及思考題1.什么是類?什么是對(duì)象?對(duì)象和類是什么關(guān)系?答:類是抽取了同類對(duì)象的共同屬性和行為形成的對(duì)象或?qū)嶓w的“模板”。 對(duì)象是現(xiàn)實(shí)世界中實(shí)體的描述,是其自身所具有的狀態(tài)特征及可以對(duì)這些狀態(tài)施加的操作結(jié)合在一起所構(gòu)成的獨(dú)立實(shí)體。類和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系:類表達(dá)的是一種抽象的概念,它描述了該類對(duì)象的共同特征;而對(duì)象是具體事物,

20、以類為模板來(lái)生成,它具有自己的狀態(tài)。舉例:類與對(duì)象的關(guān)系猶如零件的圖紙與按圖紙制造出的零件關(guān)系一樣;圖紙(類)描述了零件(對(duì)象)的共同特征,每個(gè)零件(對(duì)象)又有自己的個(gè)性,如加工精度的不同等等2、 什么是方法?方法的結(jié)構(gòu)是怎樣的?設(shè)計(jì)方法應(yīng)考慮哪些因素?答:方法是Java類的一個(gè)組成部分,通過(guò)類的方法改變對(duì)象的狀態(tài)。 方法的結(jié)構(gòu):方法修飾符 返回值類型 方法名(形參列表)throws異常列表 方法體; 設(shè)計(jì)方法應(yīng)考慮因素有:(1) 方法名是Java中任意的標(biāo)識(shí)符,按照命名的約定,方法名應(yīng)該是有意義的動(dòng)詞或動(dòng)詞短語(yǔ),它的第一個(gè)字母一般要小寫,其他有意義的單詞的首字母要大寫,其余字母小寫。 (2)

21、 返回值類型可以是任意的Java類型,甚至可以是定義此方法的類。如果方法沒(méi)有返回值,則用void表示。 (3) 形式參數(shù)列表是可選的。如果方法沒(méi)有形式參數(shù),就用一對(duì)小括號(hào)“()”表示。形式參數(shù)列表的形式如下: (類型 形參名,類型 形參名,) (4) throws異常列表規(guī)定了在方法執(zhí)行中可能導(dǎo)致的異常。3.創(chuàng)建一個(gè)有兩個(gè)方法的類,其中第一個(gè)方法兩次調(diào)用第二個(gè)方法,第一次不使用this,第二個(gè)使用this。 class Rectangle /矩形類 int width; / 矩形的寬 int usethis(int width) /返回寬度的函數(shù) this. width= width; /指自

22、己這個(gè)對(duì)象 return width; int unusethis(int width) int w=width; return w; public static void main(String args) Rectangle r=new Rectangle(); /類對(duì)象的實(shí)例化 System.out.println(It is about the node of this.); /輸出語(yǔ)句 System.out.println(r.usethis(1); System.out.println(r.unusethis(2); 運(yùn)行結(jié)果: It is about the node of th

23、is. 1 2 4、創(chuàng)建一個(gè)類,該類還有int和char類型的成員變量且未被初始化,然后編程輸出這些成員變量的值,查看java是否執(zhí)行了默認(rèn)的初始化操作。 參考答案:public class CuoShiHua int a; /整型變量 char b; /字符型變量 public void show() /用來(lái)輸出未被初始化的變量的 System.out.println(a); System.out.println(b); public static void main(String args) CuoShiHua c = new CuoShiHua(); /聲明類的對(duì)象并實(shí)例化 c.show

24、(); /函數(shù)調(diào)用 輸出結(jié)果:0 /小方格代表空格 5、創(chuàng)建一個(gè)類,該類含有的成員變量和成員方法,創(chuàng)建一個(gè)該類的對(duì)象,察看當(dāng)時(shí)圖訪問(wèn)這些成員時(shí),編譯程序會(huì)給出那些信息(注意:在同一目錄下的類都屬于一個(gè)默認(rèn)的包)。 class text1 static int a; /當(dāng)被定義為static類型時(shí),為類變量,可被對(duì)象或類調(diào)用 int b; /對(duì)象變量,只能被對(duì)象調(diào)用 public void display(int a,int b) /成員方法 System.out.println(static int a=+a); System.out.println( int b=+b); public st

25、atic void display(int b) System.out.println(static display: int b=+b); public static void main(String args) text1 tt=new text1(); tt.display(5,6); /text1.display(5,6)是錯(cuò)誤的:對(duì)象變量或?qū)ο蠓椒ㄖ荒鼙粚?duì)象tt調(diào)用 text1.display(0); /當(dāng)被定義為static類型時(shí),為類方法,可被對(duì)象或類調(diào)用 tt.display(23); tt.a=9; text1.a=4; tt.b=3; 運(yùn)行結(jié)果:static int a=5

26、 int b=6static display: int b=0static display: int b=23 6、下面給出了一個(gè)矩形類Rectangle,其中含有多個(gè)構(gòu)造方法。上機(jī)編譯并運(yùn)行此程序,觀察運(yùn)行結(jié)果,體會(huì)其中不同構(gòu)造方法的設(shè)計(jì)和使用。import java.io.*; class Rectangle /矩形類 private int width; /矩形的寬度 private int length; /矩形的長(zhǎng)度 Rectangle() /矩形的不帶參數(shù)的構(gòu)造函數(shù),缺省的給出長(zhǎng)(30)和寬(20) length=30;width=20; Rectangle(int l,int w

27、) /矩形的帶參數(shù)的構(gòu)造函數(shù) length=l;width=w; Rectangle(Rectangle r) /此構(gòu)造方法以另一個(gè)Rectangle作為參數(shù) width=r.width(); /通過(guò)對(duì)象調(diào)用函數(shù)并附值給相應(yīng)變量 length=r.length(); int width() /返回寬度 return width; int length() /返回長(zhǎng)度 return length; public class CRctngle public static void main (String args ) Rectangle x1=new Rectangle(); /聲明類的對(duì)象并實(shí)

28、例化 Rectangle x2=new Rectangle(50,40); /聲明類的對(duì)象并初始化 Rectangle x3=new Rectangle(x1); System.out.println(x1.length(); System.out.println(x1.width(); System.out.println(x2.length(); System.out.println(x2.width(); System.out.println(x3.length(); System.out.println(x3.width(); 運(yùn)行結(jié)果:302050403020體會(huì):此程序中共定義了3

29、個(gè)構(gòu)造方法:Rectangle()、Rectangle(int l,int w) 、Rectangle(Rectangle r) ,其中Rectangle()是沒(méi)有參數(shù)的,Rectangle(int l,int w)以常數(shù)作為參數(shù),Rectangle(Rectangle r)是以對(duì)象最為參數(shù)。構(gòu)造函數(shù)的調(diào)用實(shí)在用new運(yùn)算符創(chuàng)建類對(duì)象是由系統(tǒng)自動(dòng)完成的,構(gòu)造函數(shù)的參數(shù)傳遞和形實(shí)結(jié)合也是由系統(tǒng)在調(diào)用的同時(shí)自動(dòng)完成。7、下面給出了一個(gè)計(jì)算階乘的類Fact和使用該類計(jì)算階乘的程序Check1。編譯并運(yùn)行該程序,觀察運(yùn)行結(jié)果,體會(huì)方法的參數(shù)的傳遞和返回值的用法。在調(diào)用時(shí)改變參數(shù)的個(gè)數(shù)和類型,看看編譯時(shí)

30、會(huì)得到什么信息。 class Fact float fact (int n) /定義計(jì)算n!的方法 int i; float x =1; for(i=1;in;i+) x=x*n; return x; public class Check1 public static void main (String args ) Fact x =new Fact( ); System.out.println(x.fact(10); /計(jì)算10! System.out.println(x.fact(15); /計(jì)算15! 運(yùn)行結(jié)果: 1.0E9 2.91929271E168、編譯并運(yùn)行下面的程序,觀察分析運(yùn)

31、行結(jié)果,體會(huì)程序中super和this的用法,進(jìn)一步理解變量隱藏和方法重寫的概念。import java.io.*;class SuperClss /定義父類 int x; SuperClss( ) /父類的構(gòu)造方法 x=10; void doClss( ) System.out.println(SuperClss.doClass(); class SubClss extends SuperClss /定義子類 int x; SubClss( ) /子類的構(gòu)造方法 super( ) ; /調(diào)用父類的構(gòu)造方法 x =100; void doClss( ) /重寫父類的doClss方法 Syste

32、m.out.println(SubClss.doClss(); void doDemo( ) /演示super和this的方法 int x; x=1000; super.doClss( ); /調(diào)用父類的doClss方法 doClss( ); /調(diào)用本類的doClss方法 System.out.println(super.x=+super.x); /父類的x System.out.println(this.x=+this.x); /本類的x System.out.println(x=+x); /本方法的x public class SuperDemo public static void ma

33、in(String args ) /主方法 SubClss s = new SubClss(); s.doDemo(); 運(yùn)行結(jié)果:SuperClss.doClass()SubClss.doClss()super.x=10this.x=100x=1000體會(huì):此程序中定義了一個(gè)父類,子類SubClss繼承了父類SuperClss,在主函數(shù)中定義SubClss類對(duì)象 s時(shí)(即執(zhí)行語(yǔ)句:SubClss s = new SubClss();時(shí) ),自動(dòng)調(diào)用類SubClss的構(gòu)造函數(shù)SubClss(),再此構(gòu)造函數(shù)中先執(zhí)行“super( ) ;”語(yǔ)句,這樣就調(diào)用類SuperClss的構(gòu)造方法Super

34、Clss( ),因?yàn)閟uper來(lái)指明超類中的方法。同樣在子類方法doDemo( )中,執(zhí)行語(yǔ)句“super.doClss( );”時(shí),則調(diào)用父類的方法doClss( )。如不用super 來(lái)指定的話,則調(diào)用的是子類的方法doClss( ),這里子類SubClss()的成員方法doClss( )重寫了父類SuperClss( )的成員方法doClss( )。 語(yǔ)句 “System.out.println(super.x=+super.x);”中super調(diào)用的是父類SuperClss的變量x,而語(yǔ)句 “System.out.println(this.x=+this.x);”中this調(diào)用的子類S

35、ubClss的變量x, 關(guān)鍵字this和super分別用來(lái)指明子類和父類中同名的成員變量。這里父類SuperClss的成員變量x、子類SubClss的成員變量x和類方法doDemo( )中使用的局部變量x三者同名,則要使用關(guān)鍵字this和super來(lái)指定所要使用的變量。如不用則輸出的類方法的局部變量,如語(yǔ)句“System.out.println(x=+x);”輸出的就是類方法doDemo()的局部變量。這里子類SubClss()的成員變量x隱藏了父類SuperClss( )的成員變量x。 9、編譯并運(yùn)行下面的程序,分析運(yùn)行結(jié)果,體會(huì)其中方法重載的用法,進(jìn)一步理解方法重載的概念。 class F

36、ather /本類中的speak方法重載了兩次 void speak( ) /無(wú)參數(shù)的speak方法 System.out.println(I am Father! ); void speak(String s) /有參數(shù)的speak方法 System.out.println(I like+s+. ); public class OverLoadingDemo public static void main (String args ) Father x = new Father( ); x.speak(); /調(diào)用無(wú)參的speak方法 x.speak(music) /調(diào)用有參的speak方法

37、 運(yùn)行結(jié)果: I am Father!I like music.第五章 習(xí)題及思考題1、 什么是繼承?什么是父類?什么是子類?繼承的特性可給面向?qū)ο缶幊處?lái)什么好處?什么是單重繼承?什么是多重繼承? 解:繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中兩個(gè)類之間的一種關(guān)系。當(dāng)一個(gè)類獲取另一個(gè)類中所有非私有的數(shù)據(jù)和操作的定義作為它自己的部分或全部成分時(shí),就稱這兩個(gè)類之間具有繼承關(guān)系。被繼承的類稱為父類或超類,繼承了父類或超類的所有數(shù)據(jù)和操作的類稱為子類。 面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承,可使得程序結(jié)構(gòu)更加清晰,降低了編碼和維護(hù)的工作量。 如果一個(gè)類只能有一個(gè)父類,則這種繼承關(guān)系稱為單重繼承;如果一個(gè)類可以有多個(gè)父類,則這種繼

38、承關(guān)系稱為多重繼承。2、 “子類的域和方法的數(shù)目一定大于等于父類的域和方法的數(shù)目”,這種說(shuō)法是否 正確?為什么? 解:這種說(shuō)法是錯(cuò)誤的,因?yàn)樽宇惒灰欢芾^承父類的所有域和方法,它只能繼承所 有非私有的域和方法。如果子類在繼承之外自己定義的域和方法數(shù)目小于父類中私有成 員的數(shù)目,則子類的域和方法的數(shù)目小于父類的域和方法的數(shù)目。3、什么是方法的覆蓋?方法的覆蓋與域的隱藏有何不同?與方法的重載有何不同? 解;子類重新定義父類中已經(jīng)存在的方法,稱為方法的覆蓋。注意:方法覆蓋與域的隱藏不同。子類重新定義父類已有的域,并不能完全取代它從父類那里繼承的同名的域,這個(gè)域仍然占用子類的內(nèi)存空間,在某些情況下會(huì)被

39、使用;而當(dāng)子類重新定義父類的方法時(shí),從父類那里繼承來(lái)的方法將被新方法完全取代,不再在子類的內(nèi)存空間中占一席之地。 與方法的覆蓋不同,重載不是子類對(duì)父類同名方法的重新定義,而是在一個(gè)類中定義了同名的不同方法。4、 什么是多態(tài)?面向?qū)ο蟪绦蛟O(shè)計(jì)為什么要引人多態(tài)的特性?使用多態(tài)有什么優(yōu)點(diǎn)? 解:一個(gè)類中存在多個(gè)同名的方法,稱為多態(tài)。把抽象功能和目的相同,而具體實(shí)現(xiàn)因不同情況而異的方法命名為同名方法,符合面向?qū)ο蟪绦蛟O(shè)計(jì)中抽象、提升概念,封裝、隱藏細(xì)節(jié)的特點(diǎn),從而提高了程序的簡(jiǎn)潔性和可讀性,降低了類和程序模塊直接的相互耦合和依賴。5、 父類對(duì)象與子類對(duì)象相互轉(zhuǎn)化的條件是什么?如何實(shí)現(xiàn)它們的相互轉(zhuǎn)化?

40、解:一個(gè)子類對(duì)象也可以被合法地視為一個(gè)父類的對(duì)象,即一個(gè)父類對(duì)象的引用,其指向的內(nèi)存單元可能實(shí)際上是一個(gè)子類的對(duì)象。在這種情況下,可以使用強(qiáng)制類型轉(zhuǎn)換,將父類對(duì)象的引用轉(zhuǎn)換成實(shí)際的子類對(duì)象的引用6、什么是包?它的作用是什么? 解:包是一種松散的類的集合。包的作用主要是把需要協(xié)同工作的不同的類組織在一起,使得程序功能清楚、結(jié)構(gòu)分明。7、 CLASSPATH是有關(guān)什么的環(huán)境變量?它如何影響程序的運(yùn)行?如何設(shè)置和修改這個(gè)環(huán)境變量? 解:CLASSPATH是指定缺省的包文件(字節(jié)碼文件)路徑的環(huán)境變量。如果CLASSPATH設(shè)置得不正確,則程序編譯、運(yùn)行時(shí)可能找不到所需的類的字節(jié)碼文件,從而使程序無(wú)法

41、正常運(yùn)行。 使用如下命令設(shè)置或修改CLASSPATH: SET classpath=,;d:jdk1.5.0libext8、 一個(gè)類如何實(shí)現(xiàn)接口?實(shí)現(xiàn)某接口的類是否一定要重載該接口中的所有抽象方法? 解:使用關(guān)鍵字implements可以定義類實(shí)現(xiàn)某接口。實(shí)現(xiàn)某接口的類如果不是抽象類,則需要通過(guò)重載來(lái)實(shí)現(xiàn)該接口中的所有抽象方法;如果這個(gè)類是抽象類,則它可以不必實(shí)現(xiàn)該接口中的所有抽象方法。9、 為某研究所編寫一個(gè)通用程序,用來(lái)計(jì)算每一種交通工具運(yùn)行1000公里所需的時(shí)間,已知每種交通工具的參數(shù)都是3個(gè)整數(shù)A、B、C的表達(dá)式?,F(xiàn)有兩種工具:Car007 和Plane,其中Car007 的速度運(yùn)算公

42、式為:A*B/C,Plane 的速度運(yùn)算公式為:A+B+C。需要編寫三類:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未來(lái)如果增加第3種交通工具的時(shí)候,不必修改以前的任何程序,只需要編寫新的交通工具的程序。其運(yùn)行過(guò)程如下,從命令行輸入ComputeTime的四個(gè)參數(shù),第一個(gè)是交通工具的類型,第二、三、四個(gè)參數(shù)分別時(shí)整數(shù)A、B、C,舉例如下: 計(jì)算Plane的時(shí)間:java ComputeTime Plane 20 30 40 計(jì)算Car007的時(shí)間:java ComputeTime Car007 23 34 45 如果第3種交通工具為Ship,則只需要編寫Ship.java,運(yùn)行時(shí)輸入:java ComputeTime Ship 22 33 44 提示:充分利用接口的概念,接口對(duì)象充當(dāng)參數(shù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論