2013弓彩霞實(shí)驗(yàn)三_第1頁
2013弓彩霞實(shí)驗(yàn)三_第2頁
2013弓彩霞實(shí)驗(yàn)三_第3頁
2013弓彩霞實(shí)驗(yàn)三_第4頁
2013弓彩霞實(shí)驗(yàn)三_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、山西大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院實(shí)驗(yàn)報(bào)告姓 名弓彩霞學(xué) 號(hào)專業(yè)班級(jí)2013級(jí)軟件工程四班課程名稱 Java實(shí)驗(yàn)實(shí)驗(yàn)日期2015/6/18成 績(jī)指導(dǎo)教師王紅菊批改日期實(shí)驗(yàn)名稱實(shí)驗(yàn) 3 繼承、接口、包的使用與訪問控制一、實(shí)驗(yàn)?zāi)康?、掌握java 繼承中父類及其子類的定義方法。2、掌握子類重寫父類同名方法的方法。Super3、掌握接口的用法。4、 理解 Java 包的組織結(jié)構(gòu) ;5、 學(xué)會(huì)編寫帶有包結(jié)構(gòu)的程序 ;6、 掌握包結(jié)構(gòu)下的成員訪問控制。二、實(shí)驗(yàn)內(nèi)容編程題.(一) 定義一個(gè)數(shù)組,它可以存儲(chǔ)一個(gè)矩形、一個(gè)圓,一個(gè)雙精度數(shù)或一個(gè)整數(shù)程序代碼:package java第三次實(shí)驗(yàn);public clas

2、s Object public static void main(String args)Object shape = new Object10;shape0 = new Rectangle(2,3);shape1 = new Circle2(2); /創(chuàng)建一個(gè)Circle類型。shape2 = new Integer(3);shape3 = new Double(1.0); for(int i =0;i4;i+) if(shapei) instanceof Circle2) (Circle2)shapei).show(); else if(shapei) instanceof Rectang

3、le) (Rectangle)shapei).show();/這里恢復(fù)原來的對(duì)象類型,用強(qiáng)制類型轉(zhuǎn)換。 else if(shapei) instanceof Integer) System.out.println(整數(shù)為: + shapei); else if(shapei) instanceof Double) System.out.println(浮點(diǎn)數(shù)為: + shapei); /定義長(zhǎng)方形class Rectangleprotected double length,width;Rectangle(double l, double w)this.length = l;this.width

4、 = w;void show()System.out.print(長(zhǎng)方形的長(zhǎng)為: + length);System.out.println( 長(zhǎng)方形的寬為: + width);/定義圓class Circle2protected double r;Circle2(double r)this.r = r;void show()System.out.println(圓形的半徑為: + r);運(yùn)行結(jié)果貼圖:(二)設(shè)計(jì)一個(gè)名為Triangle的類來擴(kuò)展GeometricObject類,該類包括: j 三個(gè)名為side1、side2和side3的double數(shù)據(jù)域表示這個(gè)三角形的三條邊,它們的默認(rèn)值是1

5、.0。k一個(gè)無參構(gòu)造方法創(chuàng)建默認(rèn)的三角形。l一個(gè)能創(chuàng)建帶制定side1、side2和side3的三角形的構(gòu)造方法。m所有三個(gè)數(shù)據(jù)域的訪問器方法。n一個(gè)名為getArea()的方法返回這個(gè)三角形的面積。o一個(gè)名為getPerimeter()方法返回三角形的周長(zhǎng)。p一個(gè)名為toString()的方法返回這個(gè)三角形的字符串描述,包括三條邊的長(zhǎng)、面積和周長(zhǎng)。畫出這些類的UML圖。實(shí)現(xiàn)這些類,編寫一個(gè)測(cè)試程序,創(chuàng)建邊長(zhǎng)為1、1.5和1.顏色為yellow,filled為true的Triangle對(duì)象,然后顯示它的面積、周長(zhǎng)、顏色以及是否被填充。程序代碼:package Java第三次實(shí)驗(yàn);public

6、class GeometricObject private String color = white;private boolean filled;private java.util.Date dateCreated;public GeometricObject()dateCreated = new java.util.Date();public GeometricObject(String color,boolean filled)dateCreated = new java.util.Date();this.color = color;this.filled = filled;public

7、 String getColor() return color;public void setColor(String color) this.color = color;public boolean isFilled() return filled;public void setFilled(boolean filled) this.filled = filled;public java.util.Date getDateCreated() return dateCreated;public void setDateCreated(java.util.Date dateCreated) th

8、is.dateCreated = dateCreated;Overridepublic String toString() return color= + color + nfilled= + filled+ ncreated on + dateCreated ;package Java第三次實(shí)驗(yàn);public class Triangle extends GeometricObjectprivate double side1;private double side2;private double side3;Triangle()this.side1 = 1.0;this.side2 = 1.

9、0;this.side3 = 1.0;Triangle(double side1,double side2,double side3)this.side1 = side1;this.side2 = side2;this.side3 = side3;public double getSide1() return side1;public double getSide2() return side2;public double getSide3() return side3;public double getArea() double p=0.5*(side1+side2+side3); retu

10、rn Math.sqrt(p*(p-side1)*(p-side2)*(p-side3);public double getPerimeter() return side1+side2+side3 ; /*public String toString() return Triangle side1= + side1 + , side2= + side2 + , side3=+ side3 + , getSide1()= + getSide1() + , getSide2()=+ getSide2() + , getSide3()= + getSide3() + , getArea()=+ ge

11、tArea() + , getPerimeter()= + getPerimeter() + ;*/Overridepublic String toString() return side1= + side1 + , nside2= + side2 + , nside3=+ side3 + , ngetArea()=+ getArea() + , ngetPerimeter()= + getPerimeter()+ , ngetColor()= + getColor() + , nisFilled()= + isFilled()+ ,ngetDateCreated()= + getDateCr

12、eated() ;public static void main(String args) Triangle t1 = new Triangle(1,1.5,1.);t1.setColor(yellow);t1.setFilled(true);System.out.println(t1.toString();運(yùn)行結(jié)果貼圖:(三) 設(shè)計(jì)一個(gè)名為person的類和它的兩個(gè)名為Student和Employee子類。Employee類又有子類:教員類Fculty和職員類Staff。每個(gè)人都有姓名、地址、電話號(hào)碼和電子郵箱地址。學(xué)生有班級(jí)狀態(tài)(大一、大二、大三、大四)。將這些狀態(tài)定義為常量。一個(gè)雇員有辦

13、公室、工資和受聘日期。定義一個(gè)名為MyDate的類,包含數(shù)據(jù)域:year、month和day。教員有辦公時(shí)間和級(jí)別。職員有職務(wù)稱號(hào)。覆蓋每個(gè)類中的toString方法,顯示相應(yīng)的類名和人名。 畫出這些類的UML圖。實(shí)現(xiàn)這些類。編寫一個(gè)測(cè)試程序,創(chuàng)建Person、Student、Employee、Faculty和Staff,并且調(diào)用它們的toString方法。程序代碼:package Java第三次實(shí)驗(yàn);public class Person private String name ;private String address;private String telephoneNumber;pr

14、ivate String e_mail;public String getName() return name;public void setName(String name) = name;Overridepublic String toString() / TODO Auto-generated method stubSystem.out.println(Person + getName();return super.toString();public static void main(String args) Person person = new Person();

15、person.setName(Gong);person.toString();Student student = new Student();student.setName(Wang);student.toString();Employee employee= new Employee();employee.setName(Zhang);employee.toString();Fculty fculty = new Fculty();fculty.setName(Han);fculty.toString();Staff staff = new Staff();staff.setName(Li)

16、;staff.toString(); class Student extends Personprivatefinal String STR1 = 大一;privatefinal String STR2 = 大二;privatefinal String STR3 = 大三;privatefinal String STR4 = 大四;Overridepublic String getName() / TODO Auto-generated method stubreturn super.getName();Overridepublic void setName(String name) / TO

17、DO Auto-generated method stubsuper.setName(name);Overridepublic String toString() / TODO Auto-generated method stubSystem.out.println(Student + getName();return super.toString(); class Employee extends Person private int officeNumber;/辦公室號(hào) private double balance;/雇員工資 private java.util.Date date;/受聘

18、日期 Overridepublic String getName() / TODO Auto-generated method stubreturn super.getName();Overridepublic void setName(String name) / TODO Auto-generated method stubsuper.setName(name);Overridepublic String toString() / TODO Auto-generated method stubSystem.out.println(Employee + getName();return su

19、per.toString(); class Fculty extends Employee private float timeOfJob;/辦公時(shí)間 private int level;/級(jí)別 Overridepublic String getName() / TODO Auto-generated method stubreturn super.getName();Overridepublic void setName(String name) / TODO Auto-generated method stubsuper.setName(name);Overridepublic Strin

20、g toString() / TODO Auto-generated method stubSystem.out.println(Fculty + getName();return super.toString(); class Staff extends Employee private String TitleOfJob; Overridepublic String getName() / TODO Auto-generated method stubreturn super.getName();Overridepublic void setName(String name) / TODO

21、 Auto-generated method stubsuper.setName(name);Overridepublic String toString() / TODO Auto-generated method stubSystem.out.println(Staff + getName();return super.toString(); class Mydate private int year; private int month; private int day;Overridepublic String toString() / TODO Auto-generated meth

22、od stubreturn super.toString(); 運(yùn)行結(jié)果貼圖:讀懂下面模板代碼,按要求補(bǔ)充程序并調(diào)試運(yùn)行。(一)設(shè)計(jì)和實(shí)現(xiàn)一個(gè) Soundable 接口 , 該接口具有發(fā)聲功能 , 同時(shí)還能夠調(diào)節(jié)聲音大小。 Soundable 接口的這些功能將會(huì)由 3 種聲音設(shè)備來具體實(shí)現(xiàn) , 它們分別是收音機(jī) Radio 、隨身昕 Walkman 和手機(jī) Mobilephone 。最后還要設(shè)計(jì)一個(gè)應(yīng)用程序類來使用這些實(shí)現(xiàn)了 Soundable 接口的聲音設(shè)備類。程序運(yùn)行時(shí) , 先詢問用戶想聽哪種設(shè)備 , 然后程序就會(huì)按照該設(shè)備的工作方式來發(fā)出聲音。仔細(xì)閱讀程序清單1-9, 并完成其中的代碼1

23、代碼3。程序清單1-9 InterfaceTest.javaimport java.util.Scanner;interface Soundable public void increaseVolume( );/音量升高 public void decreaseVolume( );/音量降低 public void stopSound( );/音樂停止 public void playSound( );/音樂開始播放/ 類Radio 繼承接口Soundableclass Radio implements Soundable public void increaseVolume( ) Syste

24、m.out.println(增大收音機(jī)音量); public void decreaseVolume( ) System.out.println(減小收音機(jī)音量); public void stopSound( ) System.out.println(關(guān)閉收音機(jī)); public void playSound( ) System.out.println(收音機(jī)播放廣播); /類Walkman繼承接口Soundableclass Walkman implements Soundable public void increaseVolume( ) System.out.println(增大隨聲聽

25、音量); public void decreaseVolume( ) System.out.println(減小隨聲聽音量); / 輸出減小隨聲聽音量 public void stopSound( ) System.out.println(關(guān)閉隨聲聽); / 輸出關(guān)閉隨聲聽音量 public void playSound( ) System.out.println(隨聲聽發(fā)出音樂);/ 輸出隨聲聽發(fā)出音樂 /手機(jī)類繼承接口Soundableclass Mobilephone implements Soundable public void increaseVolume( ) System.ou

26、t.println(增大手機(jī)音量);/ 輸出增大手機(jī)音量 public void decreaseVolume( ) System.out.println(減小手機(jī)音量);/ 輸出減小手機(jī)音量 public void stopSound( ) System.out.println(關(guān)閉手機(jī));/ 輸出關(guān)閉手機(jī) public void playSound( ) System.out.println(手機(jī)發(fā)出來電鈴聲);/ 輸出手機(jī)發(fā)出來電鈴聲 class People private String name; private int age; public void listen(Soundab

27、le s) s.playSound( ); public class InterfaceTest public static void main(String args) int i; People sportsman = new People( ); Scanner scanner = new Scanner(System.in); Soundable soundDevice = new Soundable3; /往聲音設(shè)備數(shù)組中放入能發(fā)聲的設(shè)備 soundDevice0 = new Radio( ); soundDevice1 = new Walkman( ); soundDevice2=

28、new Mobilephone(); /創(chuàng)建手機(jī)對(duì)象并賦值給soundDevice2 System.out.println(你想聽什么? 請(qǐng)輸入選擇:0-收音機(jī) 1-隨聲聽 2-手機(jī)); i = scanner.nextInt( ); /開始聽聲音 sportsman.listen(soundDevicei); soundDevicei.increaseVolume( ); soundDevicei.stopSound();/調(diào)用stopSound( )方法 (2) 打開文本編輯器編輯 InterfaceTest.java 并保存 , 然后在Eclipse 環(huán)境中進(jìn)行編譯 , 編譯的結(jié)果將會(huì)產(chǎn)

29、生 6 個(gè) class 文件 , 其中包括 Soundable.class, 雖然 Soundable 本身是一個(gè)接口 , 但編譯之后也會(huì)產(chǎn)生 class 文件。(3) 編譯之后運(yùn)行這個(gè)程序 , 觀察所得結(jié)果。思考(1) 請(qǐng)問在 InterfaceTest 類中 ,SoundDevice 數(shù)組是Soundable類型的 , 該數(shù)組為什么能存放 3 種不同的對(duì)象 Radio、Walkman 和 Mobilephone 呢 ?答:SoundDevice數(shù)組是接口類型;因?yàn)轭怰adio、Walkman和Mobilephone都實(shí)現(xiàn)了接口SoundDevice,則接口SoundDevice就類似于這三

30、個(gè)類的父類,而父類的引用可以指向一個(gè)子類的對(duì)象,所以該數(shù)組可以存放三個(gè)不同的對(duì)象。 (2) 在程序中 ,Soundable 是一個(gè)接口 , 那么該接口可以被實(shí)例化嗎?答:不可以。因?yàn)榻涌诤统橄箢愊嗨疲梢月暶饕妙愋偷淖兞?,但不可使用new操作符創(chuàng)建接口的實(shí)例對(duì)象。 (3) 現(xiàn)在假定要為程序增加一個(gè)鬧鐘類 Clock, 該類也實(shí)現(xiàn) Soundable 接口 , 能夠發(fā)出滴答聲 , 請(qǐng)將以下的 Clock 類加入到 InterfaceTest.java 程序中 , 并在 InterfaceTest 類的 main() 方法中加入 SoundDevice3 new Clock(); 語句。clas

31、s Clock implements Soundablepublic void Stopsound()System.out.println( 關(guān)閉鬧鐘 );public void Playsound()system.out.println( 鬧鐘發(fā)出滴答聲 ); 修改之后 , 重新編譯 InterfaceTest.java 并運(yùn)行它 , 觀察結(jié)果。(4) 在第 (3) 小題中由于新加入的 Clock 類僅僅實(shí)現(xiàn)了 Soundable 接口的stopsound() 和 playsound() 方法 , 而 increaseVolume() 和 decreaseVolume() 方法沒有實(shí)現(xiàn) ,

32、因此它實(shí)質(zhì)上是一個(gè)抽象類 , 而抽象類是不能實(shí)例化的 , 所以導(dǎo)致編譯錯(cuò)誤。但是按照常理 , 鬧鐘的滴答聲確實(shí)是不可以增大或減小的 , 那么如何解決這個(gè)問題呢 ? 現(xiàn)在請(qǐng)?jiān)?Clock 類中加入下面兩個(gè)含 空方法體的方法實(shí)現(xiàn) , 再編譯運(yùn)行程序 , 看看會(huì)有什么變化。public void increaseVolume()public void decreaseVolume()圖3.14(5) 現(xiàn)在請(qǐng)模仿本實(shí)驗(yàn)的程序設(shè)計(jì)出一個(gè)自己的接口程序 , 要求先設(shè)計(jì)一個(gè) moveable 可移動(dòng)接口 , 然后分別設(shè)計(jì) 3 個(gè)類 , 即汽車 Car 、輪船 Ship 、飛機(jī) Aircraft 來實(shí)現(xiàn)該接口

33、 , 最后設(shè)計(jì)一個(gè)應(yīng)用程序來使用它們。import java.util.Scanner;interface movable public void increasespeed( ); public void decreasespeed( ); public void stopMove( ); public void startMove( );class Car implements movable public void increasespeed( ) System.out.println(增大汽車速度); public void decreasespeed( ) System.out.pr

34、intln(減小汽車速度); / 輸出減小隨聲聽音量 public void stopMove( ) System.out.println(汽車停止前進(jìn)); public void startMove( ) System.out.println(汽車開始前進(jìn)); class Ship implements movable public void increasespeed( ) System.out.println(增大輪船速度); public void decreasespeed( ) System.out.println(減小輪船速度); / 輸出減小隨聲聽音量 public void

35、stopMove( ) System.out.println(輪船停止前進(jìn)); public void startMove( ) System.out.println(輪船開始前進(jìn)); class Aircraft implements movable public void increasespeed( ) System.out.println(增大飛機(jī)速度); public void decreasespeed( ) System.out.println(減小飛機(jī)速度); public void stopMove( ) System.out.println(飛機(jī)停止前進(jìn)); public

36、void startMove( ) System.out.println(飛機(jī)開始前進(jìn)); class People1 private String name; private int age; public void move(movable m) m.startMove( ); public class Myinterface public static void main(String args) int i; People1 sportsman = new People1( ); Scanner scanner = new Scanner(System.in); movable mov

37、eDevice = new movable3; moveDevice0 = new Car( ); moveDevice1 = new Ship( ); moveDevice2=new Aircraft(); /創(chuàng)建手機(jī)對(duì)象并賦值給soundDevice2 System.out.println(你想使用哪種交通工具? 請(qǐng)輸入選擇:0-汽車 1-輪船 2-飛機(jī)); i = scanner.nextInt( ); sportsman.move(moveDevicei); moveDevicei.increasespeed( ); moveDevicei.stopMove();/調(diào)用stopMove

38、( )方法 class tongxun implements movable public void StopMove() System.out.println( 停止前進(jìn) ); public void StartMove()System.out.println(開始前進(jìn)); Overridepublic void increasespeed() / TODO Auto-generated method stubOverridepublic void decreasespeed() / TODO Auto-generated method stubOverridepublic void sto

39、pMove() / TODO Auto-generated method stubOverridepublic void startMove() / TODO Auto-generated method stub 程序運(yùn)行結(jié)果:點(diǎn)評(píng) 接口的特點(diǎn)在于只定義能做什么 , 而不定義怎么去做。在本實(shí)驗(yàn)中 , 收音機(jī) Radio, 隨身聽 Walkman 和手機(jī) Mobilephone 分別以自己的方式實(shí)現(xiàn)了 Soundable 接口 , 當(dāng)接口成為 Listen(Soundable s) 方法的形參時(shí) , 任何實(shí)現(xiàn)了 Soundable 接口的對(duì)象都能成為它的實(shí)參 , 如果不用接口作形參 , 那就必須

40、寫 3 個(gè)不同的方法 , 即listenRadio(Radio r), listenWalkman(Walkman w) ,listenMobilephone(Mobilephone m)。(二) 編寫 3 個(gè)類 , 類名分別為 Clock、A、B, 其中類 Clock 和類 A 放在同一個(gè)包 packone 中 , 而類 B 則放在另一個(gè)包 packtwo 中 , 包 packone 和包 packtwo 放在同一個(gè)目錄下。類 Clock 中有 3 個(gè)整型數(shù)據(jù) hour、minute、second, 它們分別是 public、private、protected, 類 Clock 還包含一些方

41、法使用這些數(shù)據(jù)。類 A 和類 B 的功能相似 , 都是使用類 Clock 并調(diào)用類 C1ock 中的方法。請(qǐng)按照下面的實(shí)驗(yàn)步驟 , 循序漸進(jìn)的完成實(shí)驗(yàn) , 并回答后面的問題。首先在 c:programming 目錄下創(chuàng)建一個(gè)文件夾 , 命名為 packone, 然后在該文件夾下創(chuàng)建一個(gè)名叫 Clock.java 的程序 , 打開文本編輯器按程序清單輸入該程序。程序清單Clock.javapackage packone;public class Clock public int hour;private int minute;protected int second;public Clock(i

42、nt i, int j, int k) setAll(i, j, k);void setAll(int i, int j, int k) hour = i;minute = j;second = k;public int getHour() return hour;public int getMinute() return minute;public int getSecond() return second; (2) 接著在 packone 文件夾下創(chuàng)建第二個(gè)程序命名為 A.java, 打開文本編輯器按程序清單輸入該程序。程序清單A.javapackage packone;class A p

43、ublic static void main(String args) Clock c = new Clock(5,20,10);System.out.println(從類A中訪問Clock hour=+c.hour);System.out.println(從類A中訪問Clock minute=+c.minute);System.out.println(從類A中訪問Clock second=+c.second); (3) 現(xiàn)在在 c:programming 目錄下創(chuàng)建第二個(gè)文件夾 , 命名為 packtwo, 然后在該文件夾下創(chuàng)建一個(gè)名為 B.java 的程序 , 打開文本編輯器按如下程序清單

44、輸入該程序。程序清單B.javapackage packtwo;import packone.*;class B public static void main(String args) Clock c = new Clock(8,30,5);System.out.println(從類B中訪問Clock hour=+c.getHour();System.out.println(從類B中訪問Clock minute=+c.getMinute();System.out.println(從類B中訪問Clock second=+c.getSecond(); 至此已經(jīng)編輯好了 3 個(gè)源程序 , 然后在Eclipse 環(huán)境中分別編譯運(yùn)行packone 文件夾和 packtwo 文件夾中的程序,編譯的結(jié)果將分別在 packone 文件夾和 packtwo 文件夾中生成 Clock.class,A.class 和 B.class 文件。接著分別運(yùn)行這兩個(gè)程序 , 觀察程序輸出結(jié)果。程序A報(bào)錯(cuò): The field Clock.minute is not visible;minute是私有數(shù)據(jù)類型,只有本類可以訪問程序B正常思考(1) 現(xiàn)在請(qǐng)將 Clock 類的構(gòu)造函數(shù) public Clock(int i,int j,int k) 改成 Clo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論