《java实验报告3》
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
项目二
实验一
实验内容:
1.(1)阅读如图2.1所示程序。该程序实现了一个圆环类Ring,该类有3个属性,分别是内半径innerRadius,外半径outerRadius和颜色color,这些属性可以自行设置也可以得到其值,并且该程序还可以返回圆环的面积Area。
图2.1
(2)新建Ring.java文件,输入程序,将程序中“代码1-4”处补充完整并保存。
(3)使用DOS命令进入其所存放的目录,编译运行该程序。并将完整程序和运行结果截图写入实验报告。
实验分析:
类的定义,对象的声明。
实验程序:
实验结果截图:
实验问题分析:
实验中,主要出现两个问题(1)中英文分号输入错误
(2)编写程序时,对象的大小写错误,导致找不到该符号
编写程序,运行前,应该进行检查。
实验二
实验内容:
2.阅读如图2.2所示程序。该程序实现了一个圆类Circle,该类有3个属性,分别是圆周率pi,半径radius和圆对象个数objectNo,其中圆周率和圆对象个数为static成员。并且该程序还有两个static方法用来设置圆周率和显示当前圆对象个数。
图2.2
(2)新建Circle.java文件,输入程序并保存。
(3)使用DOS命令进入其所存放的目录,编译运行该程序。分析观察运行结果并将运行结果截图写入实验报告。
(4)能否将程序中的cir1.setRadius(10)改为Circle.setRadius(10)?为什么?将圆周率pi的static修饰符去掉,会出现什么结果?为什么?将setPI(d ouble p)的 static修饰符去掉呢?圆对象个数objectNo为什么要设置为stat ic,它的作用是什么?将你的分析写入实验报告。
实验分析:
(4)cir1.setRadius(10)不能改为Circle.setRadius(10),因为Circle是定义的方法,它是一个类,cir1是它实例化的一个对象。必须是对象调用方法才有意义。就好比具体的是哪个人相互比较才有意义。
一起将圆周率pi的static去掉,程序结果第二个pi发生微小的变动。将圆周率pi的static修饰符去掉,会出现错误:无法从静态上下文中引用非静态的变量pi。然而,将setPI(double p)的 static修饰符去掉,程序结果不变。
static修饰的变量,是在程序中与别人共享的,意思是说,objectNo设置为static之后,每增加一个圆,objectNo自动加1,从而记录圆的个数。
比如,修改前,
修改后:
很明显,修改后的当前圆的个数记录的已经出现错误。
实验程序:
实验截图:
实验问题总结:
方法调用时,发生错误。
比如:
少了()。
实验三
实验内容:
3.阅读如图 2.3所示程序。该程序实现了一个父类Telephone和其子类Mobilephone,该类有电话品牌,电话号码等属性,另外还有计算话费和显示信息等方法。子类Mobilephone除了具有父类的属性外,还有网络类型,被叫时间等属性,另外它还有自己的计算话费和显示信息的方法。
图2.3
(2)新建Inheritance.java文件,输入程序,将程序中“代码1-5”处补充完整并保存。
(3)使用DOS命令进入其所存放的目录,编译运行该程序。并将完整程序和运行结果截图写入实验报告。
(4)Mobilephone类的display( )方法中的 callCost( )方法调用的是谁的方法?如何调用父类的callCost( )方法?另外,将Mobilephone类的构造方法中的super(b, num)去掉,有什么结果?为什么?将你的分析写入实验报告。
实验分析:
1(4)callCost( )调用的是子类中的方法,实际上callCost( )
方法已经被重写了。要调用父类的构造方法,可以使用关键字super调用。
super(b, num)去掉,将会出现
实际上是找不到父类的String b,String num这两个属性。
实验程序:
实验截图:
实验问题总结:
1.经常的出现,找不到类的符号,后来发现,是因为在编写程序的时候,没有
认识java的结构,复制粘贴,简单又能保证不出错误啊,有了教训。
2.文件名定义错误,导致
实验四
实验内容:
4.阅读如图2.4所示程序。该程序实现了三个类:抽象父类Student(包括了一些学生的基本信息,如姓名,所学课程,课程成绩等)和其子类Undergraduate,Postgraduate。两个子类之间的主要差别是计算课程成绩等级的标准有所不同。
图2.4
(2)新建Polymorphism.java文件,输入程序,将程序中“代码1-5”处补充完整并保存。
(3)使用DOS命令进入其所存放的目录,编译运行该程序。并将完整程序和运行结果截图写入实验报告。
(4)能否在main()方法中添加语句Students s1 = new Students ("陈建平")?为什么?main()方法中的语句students[i].calculateGrade()都是调用哪些类的calculateGrade()方法?将你的分析写入实验报告。
实验分析:
(4)不可以。因为,Students类没有在main()函数中定义,调用父类的属性的时候,并需要用方法调用。
分别调用了Undergraduate和Postgraduate中的calculateGrade()方法。这就验证了多态的性质。同一个方法,根据不同的需要,可以被重写。
实验程序: