第九次实验.doc_第1页
第九次实验.doc_第2页
第九次实验.doc_第3页
第九次实验.doc_第4页
第九次实验.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九次实验实验一1、 编写一个 Java 程序 , 程序中有一个父类 Telephone,Telephone 类中包含有电话品牌、电话号码、通话时间、费率等属性 , 以及计算话费和显示信息等方法。另外 , 程序中还有另一个类叫作 Mobilephone, 它是 Telephone 的子类 , 除了具有 Telephone 类的属性外 , 它还有自己的属性如网络类型、被叫时间 , 同时它有自己的计算话费和显示信息的方法。 最后程序中应包含一个主类来使用上述两个类并显示它们的信息。2、 代码class Telephone String brand, number;double dialledTime;double rate;Telephone(String b, String n) brand = b;number = n;String getBrand( ) return brand; String getNumber( ) return number; double getrate( ) return rate;/代码1 /返回费率值double getDialledTime( ) return dialledTime; void setBrand(String b) brand = b;void setNumber(String n) number=n;/代码2 / 设置电话号码void setRate(double r) rate = r;void setDialledTime(double d) dialledTime = d;double callCost( ) return dialledTime * rate;void display( ) System.out.println(电话品牌: + brand + 电话号码: + number);System.out.println(通话时间: + dialledTime + 费率: + rate);System.out.println(话费: + callCost( );class Mobilephone extends Telephone String network;double receivedTime;Mobilephone(String b, String num, String net) super(b, num);network = net;String getNetwork( ) return network; double getReceivedTime( ) return receivedTime; void setNetwork(String n) network = n;void setReceivedTime(double d) dialledTime=d;/代码3 /设置被叫时间double callCost( ) return (dialledTime + 0.5*receivedTime) * rate;void display( ) System.out.println(电话品牌: + brand + 电话号码: + number+ 网络: + network);System.out.println(主叫时间: + dialledTime + 被叫时间: +receivedTime + 费率: + rate);System.out.println(话费: + callCost( );public class Inheritance public static void main(String args) Telephone tel;Mobilephone mobile;tel = new Telephone(TCL, 8309600);mobile = new Mobilephone(Nokia,CDMA);tel.setRate(0.2);tel.setDialledTime(150);mobile.setRate(0.4);mobile.setDialledTime(80);/代码4 /设置主叫时间为80mobile.setReceivedTime(120);tel.display( );System.out.println( );mobile.display();/代码5 /显示移动电话的信息3、 结果4、 练习(1) 在 Mobilephone 类的 display() 方法中有如下语句 :System.out.println( 话费 :+callcost();试问这里调用的是子类自己的 callcost() 还是其父类的 callcost(); 如果想要在此处调用父类的 callcost() 应如何处理。子类 super.callCost()(2) 子类 Mobilephone 的构造函数中有语句 super(b,num): 请指出该语句的作用。 然后请将该语句删除掉 , 编译运行程序 , 看看是否会出现编译错误 , 并分析原因。调用父类的构造方法 会出错 在调用子类构造方法时总是先调用父类的构造方法事实上 , 如果在子类的构造函数中不显式地使用 super 来调用父类的构造函数的话 ,那么系统将自动调用父类的无参或默认的构造函数。因此为了纠正这个错误 , 可试着在Telephone 类中加入一个无参的构造函数。Telephone() brand = null;number = null;(3) 要调用父类的构造函数可以用 super 关键字 , 而要调用本类自己的构造函数可以用this 关键字 , 请试着在 Telephone 类中加入一个构造函数如下 :Telephone (String b ,String n,double r)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及格60-70及格50 以下不及格60 以下不及格假设某班级里既有本科生也有研究生 , 请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组 , 既能存放本科生对象 , 又能存放研究生对象。2、 代码abstract class Student final static int CourseNo = 3; String name;String type; int courses; String courseGrade; public Student(String name) = name; courses = new intCourseNo; courseGrade=;/ 代码1 /初始化courseGrade为空串 public abstract void calculateGrade(); public String getName( ) return name; public String getType( ) return type;/代码2 /返回学生类型 public String getCourseGrade( ) return courseGrade; public int getCourseScore(int courseNumber) return coursescourseNumber; public void setName(String name) = name; public void setType(String type) this.type = type; public void setCourseScore(int courseNumber, int courseScore) coursescourseNumber=courseScore;/代码3 /按课程索引号设置课程成绩 class Undergraduate extends Student public Undergraduate(String name ) super(name);type = 本科生; public void calculateGrade() int total = 0; double average = 0; for (int i = 0; i =80&average=70&average=60&average=50&average60) courseGrade = 及格; else courseGrade = 不及格; class Postgraduate extends Student public Postgraduate(String name) super(name); type = 研究生; public void calculateGrade() int total = 0; double average = 0; for (int i = 0; i =90&average=80&average=70&average=60&average70) courseGrade = 及格; else courseGrade = 不及格; public class Polymorphism public static void main(String args) Student students = new Student5; students0 = new Undergraduate(陈建平); students1 = new Undergraduate(鲁向东); students2 = new Postgraduate(匡晓华); students3 = new Undergraduate(周丽娜); students4 = new Postgraduate(梁欣欣);/代码5 / 创建姓名为梁欣欣的Postgraduate对象students4 for (int i=0; i5 ;i+) studentsi.setCourseScore(0,87); studentsi.setCourseScore(1,90); studentsi.setCourseScore(2,78); for (int i=0; i5 ;i+) studentsi.calculateGrade(); System.out.println(姓名 + 类型 + 成绩); System.out.println(-); for (int i=0; i5 ;i+) System.out.println(studentsi.getName( )+ + studentsi.getType( )+ + studentsi.getCourseGrade( ); 3、 结果4、 练习(l) 在 Polymorphism 类中有一个循环语句用来计算每个学生的成绩等级for(int i=0;i5;i 十 +)studenti.calculateGrade();请问这里的 calculateGrade() 方法是按照研究生的标准还是按照本科生的标准来计算的。当对象是研究生时按照研究生的标准,是本科生按照本科生的标准来计算(2) 现在请在程序 Polymorphism 类的 main() 方法中添加如下的语句Student st=new Student ( 李明 );此时编译是否会报错 , 如有错误 , 请解释原因。abstract类不能用new运算符创建对象(3) 在程序中要判断 studenti 中存放的究竟是 Undergraduate 对象还是 Postgraduate对象 , 只需要调用 studenti.getType() 方法即可 , 然而 Java 提供了一个 instanceof 运算也可以完成这一任务 , 它能判断出一个对象所属的类 , 请将以下代码添加到程序中进行测试。for (int i=0;i5;i+)if(studentsi instanceof Undergraduate)System.out.println(studentsi.getName()+ 是本科生 );elseSystem.out.println(studentsi.getName()+ 是研究生 );(4)现在请模仿本程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论