第九次实验Word格式.docx
- 文档编号:18098443
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:22
- 大小:185.15KB
第九次实验Word格式.docx
《第九次实验Word格式.docx》由会员分享,可在线阅读,更多相关《第九次实验Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
System.out.println("
电话品牌:
"
+brand+"
电话号码:
+number);
通话时间:
+dialledTime+"
费率:
+rate);
话费:
+callCost());
classMobilephoneextendsTelephone{
Stringnetwork;
doublereceivedTime;
Mobilephone(Stringb,Stringnum,Stringnet){
super(b,num);
network=net;
StringgetNetwork(){
returnnetwork;
doublegetReceivedTime(){
returnreceivedTime;
voidsetNetwork(Stringn){
network=n;
voidsetReceivedTime(doubled){
dialledTime=d;
//代码3//设置被叫时间
return(dialledTime+0.5*receivedTime)*rate;
+number
+"
网络:
+network);
主叫时间:
被叫时间:
+
receivedTime+"
publicclassInheritance{
publicstaticvoidmain(String[]args){
Telephonetel;
Mobilephonemobile;
tel=newTelephone("
TCL"
"
8309600"
);
mobile=newMobilephone("
Nokia"
130****1010"
"
CDMA"
tel.setRate(0.2);
tel.setDialledTime(150);
mobile.setRate(0.4);
mobile.setDialledTime(80);
//代码4//设置主叫时间为80
mobile.setReceivedTime(120);
tel.display();
System.out.println();
mobile.display();
//代码5//显示移动电话的信息
3、结果
4、练习
(1)在Mobilephone类的display()方法中有如下语句:
话费:
"
+callcost());
试问这里调用的是子类自己的callcost()还是其父类的callcost();
如果想要在此处调用
父类的callcost()应如何处理。
子类super.callCost()
(2)子类Mobilephone的构造函数中有语句super(b,num):
请指出该语句的作用。
然后请将该语句删除掉,编译运行程序,看看是否会出现编译错误,并分析原因。
调用父类的构造方法会出错在调用子类构造方法时总是先调用父类的构造方法
事实上,如果在子类的构造函数中不显式地使用super来调用父类的构造函数的话,那么
系统将自动调用父类的无参或默认的构造函数。
因此为了纠正这个错误,可试着在Telephone类中加入一个无参的构造函数。
Telephone(){
brand=null;
number=null;
(3)要调用父类的构造函数可以用super关键字,而要调用本类自己的构造函数可以用
this关键字,请试着在Telephone类中加入一个构造函数如下:
Telephone(Stringb,Stringn,doubler){
this(b,n);
rate=r;
然后在主程序中用这个构造函数来创建一个Telephone对象,看看它能否起作用。
能起作用
实验二
1、请设计3个类,分别是学生类Student,本科生类Undergaduate,研究生类Postgraduate,其中Student类是一个抽象类,它包含一些基本的学生信息如姓名、所学课程、课程成绩等,而Undergraduate类和Postgraduate都是Student类的子类,它们之间的主要差别是计算课程成绩等级的方法有所不同,研究生的标准要比本科生的标准高一些,如表1-2所示。
表1-2课程成绩等级
本科生标准
研究生标准
80--100
优秀
90--100
70--80
良好
80--90
60--70
一般
70--80
50--60
及格
50以下
不及格
60以下
假设某班级里既有本科生也有研究生,请编写程序统计出全班学生的成绩等级并显示出来。
此题关键是设计一个学生数组,既能存放本科生对象,又能存放研究生对象。
abstractclassStudent{
finalstaticintCourseNo=3;
Stringname;
Stringtype;
int[]courses;
StringcourseGrade;
publicStudent(Stringname){
this.name=name;
courses=newint[CourseNo];
courseGrade="
;
//代码1//初始化courseGrade为空串
}
publicabstractvoidcalculateGrade();
publicStringgetName(){
returnname;
publicStringgetType(){
returntype;
//代码2//返回学生类型
publicStringgetCourseGrade(){
returncourseGrade;
publicintgetCourseScore(intcourseNumber){
returncourses[courseNumber];
publicvoidsetName(Stringname){
publicvoidsetType(Stringtype){
this.type=type;
publicvoidsetCourseScore(intcourseNumber,intcourseScore){
courses[courseNumber]=courseScore;
//代码3//按课程索引号设置课程成绩
classUndergraduateextendsStudent{
publicUndergraduate(Stringname){
super(name);
type="
本科生"
publicvoidcalculateGrade(){
inttotal=0;
doubleaverage=0;
for(inti=0;
i<
CourseNo;
i++){
total=total+courses[i];
//代码4//累加各门课程成绩
};
average=total/CourseNo;
if(average>
=80&
&
average<
100)courseGrade="
优秀"
elseif(average>
=70&
80)courseGrade="
良好"
=60&
70)courseGrade="
一般"
=50&
60)courseGrade="
及格"
elsecourseGrade="
不及格"
classPostgraduateextendsStudent{
publicPostgraduate(Stringname){
type="
研究生"
total+=courses[i];
=90&
90)courseGrade="
publicclassPolymorphism{
publicstaticvoidmain(String[]args){
Student[]students=newStudent[5];
students[0]=newUndergraduate("
陈建平"
students[1]=newUndergraduate("
鲁向东"
students[2]=newPostgraduate("
匡晓华"
students[3]=newUndergraduate("
周丽娜"
students[4]=newPostgraduate("
梁欣欣"
//代码5//创建姓名为梁欣欣的Postgraduate对象students[4]
for(inti=0;
i<
5;
i++){
students[i].setCourseScore(0,87);
students[i].setCourseScore(1,90);
students[i].setCourseScore(2,78);
students[i].calculateGrade();
System.out.println("
姓名"
+"
类型"
+"
成绩"
-----------------------"
i++){
System.out.println(students[i].getName()+"
+
students[i].getType()+"
students[i].getCourseGrade());
(l)在Polymorphism类中有一个循环语句用来计算每个学生的成绩等级
for(inti=0;
i<
5;
i十+){
student[i].calculateGrade();
请问这里的calculateGrade()方法是按照研究生的标准还是按照本科生的标准来计算的。
当对象是研究生时按照研究生的标准,是本科生按照本科生的标准来计算
(2)现在请在程序Polymorphism类的main()方法中添加如下的语句
Studentst=newStudent("
李明"
此时编译是否会报错,如有错误,请解释原因。
abstract类不能用new运算符创建对象
(3)在程序中要判断student[i]中存放的究竟是Undergraduate对象还是Postgraduate对象,只需要调用student[i].getType()方法即可,然而Java提供了一个instanceof运算也可以完成这一任务,它能判断出一个对象所属的类,请将以下代码添加到程序中进行测试。
for(inti=0;
i++){
if(students[i]instanceofUndergraduate)
System.out.println(students[i].getName()+"
是本科生"
else
是研究生"
(4)现在请模仿本程序,新增一个高中生类,它计算成绩等级的标准采用如下方法,然后
在主程序中测试并使用它。
80~100好
60~80中
60以下差
classHighextendsStudent{
publicHigh(Stringname){
高中生"
好"
中"
差"
实验三
1、分别编写四个类Point,Point2D,Point3D,Test来表示一维、二维和三维的点及测试类,使之满足下列要求:
(1)
Point类的成员变量和成员方法如下所示:
成员变量intx;
成员方法
构造函数Point(intx),实现对成员变量x的初始化
voidoffset(inta)实现对一维点x坐标的平移
doubledistance(Pointp)计算当前点到一维点p的距离
(2)
Point2D类是Point类的直接子类,其成员变量和成员方法如下所示:
成员变量intx,y;
(分别为二维空间的X,Y方向坐标),x可从父类继承。
构造函数Point2D(intx,inty),实现对成员变量x,y的初始化,可先调用父类的构造函数super(x),实现对x坐标的初始化。
voidoffset(inta,intb)实现对二维点坐标的平移,可先调用父类的offset函数实现对x坐标的平移。
doubledistance(Pointp)覆盖父类的距离函数,计算当前点到二维点p的距离
(3)
Point3D类是Point2D类的直接子类,其成员变量和成员方法如下所示:
成员变量intx,y,z;
(分别为三维空间的X,Y,Z方向坐标),x,y可从父类继承。
构造函数Point3D(intx,inty,intz),实现对成员变量x,y,z的初始化,可先调用父类的构造函数super(x,y),实现对x,y坐标的初始化。
voidoffset(inta,intb,intc)实现对三维点坐标的平移,可先调用父类的offset函数实现对x,y坐标的平移。
doubledistance(Pointp)覆盖父类的距离函数,计算当前点到三维点p的距离
(4)在测试类Test的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point3D的对象p3d1,p3d2,打印出他们之间的距离。
classPoint{
intx;
Point(intx){
this.x=x;
voidoffset(inta){
x=x+a;
doubledistance(Pointp){
returnMath.abs(this.x-p.x);
classPoint2DextendsPoint{
intx,y;
Point2D(intx,inty){
super(x);
//this.x=x;
this.y=y;
voidoffset(inta,intb){
super.offset(a);
y=y+b;
returnMath.sqrt(Math.pow(Math.abs(this.x-p.x),2)+Math.pow(Math.abs(this.y-y),2));
classPoint3DextendsPoint2D{
intx,y,z;
Point3D(intx,inty,intz){
super(x,y);
this.z=z;
voidoffset(inta,intb,intc){
super.offset(a,b);
z=z+c;
returnMath.sqrt(Math.pow(Math.abs(this.x-p.x),2)+Math.pow(Math.abs(this.y-y),2)+Math.pow(Math.abs(this.z-z),2));
publicclassTest{
publicstaticvoidmain(String[]args){
Point2Dp2d1=newPoint2D(3,4);
Point2Dp2d2=newPoint2D(6,8);
Point3Dp3d1=newPoint3D(2,1,1);
Point3Dp3d2=newPoint3D(3,4,4);
System.out.println("
p2d1和p2d2的距离"
p3d1和p3d2的距离"
System.out.println(p2d1.distance(p2d2));
System.out.println(p3d1.distance(p3d2));
p2d1和p2d2的x,y平移1个单位"
p2d1.offset(1,1);
p2d2.offset(1,1);
p3d1和p3d2的x,y平移1个单位"
p3d1.offset(1,1);
p3d2.offset(1,1);
平移后p2d1和p2d2的的距离"
平移后p3d1和p3d2的的距离"
4、分析
实验四
1、设计一个人员类(Person),以及从Person类派生出助教类(Assistant)、讲师类(Instructor)、副教授类(AssistantProfesson)和教授类(Professor)。
四种类型教师的工资收入计算公式如下:
工资收入=基本工资+授课时数×
每课时报酬
其中,助教基本工资为800元,每课时报酬25元,讲师基本工资为1000元,每课时报酬35元,副教授基本工资为1200元,每课时报酬40元,教授基本工资为1400元,每课时报酬50元。
将人员类定义为抽象类,具体定义如下:
abstractclassPers
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 实验