Java实验五
更新时间:2023-03-15 22:51:01 阅读量: 教育文库 文档下载
实验五 java继承与多态
一、实验目的:
掌握继承、多态的概念与实现方法; 掌握包和接口的定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验要求:
1. 能实现类的继承关系;
2. 用多种方法创建各个类的对象;
3. 程序应包括各个被调用方法的执行结果的显示。
4. 写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1、继承在教材例题中的应用
2、多态在工资系统中的应用
下面给出一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。 Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、 CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。
对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Earnings()派出生的。所有在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引导 并调用earnings()方法。在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。程序依次使用数组的每个元素(Employee引用)调用每个对象的employee()方法。
(1)编辑Test.java,设保存在D:\\myjava目录下。 //Employee超类的定义 abstract class Employee {
private String firsrName; private String lastName;
public Employee(String first,String last) {
firstName=first; lastName=last; }
public String getEmployeeName()
1
{
return firstName;
}
publicString getLastName() {
return lastName: }
public String toString() {
return firstName+lastName; }
public absteac double earnings();
}
//定义Boss类,为Employee的子类 final class Boss extends Employee {
private double weeklySalary;
public Boss(String frist,string lasr,double s) {
super(first,last); setWeeklySalary(s); }
public woid setWeeklySalary(double s) {
weeklySalary=(s>0?s:o\\0); }
public double earnings() {
return “Boss”+super.roString(); } }
//定义CommissiomWorker类,为Employee的子类 final class CommissionWorker extends Employee {
private double salary;
private double commission; private int quantity;
public CommissionWorker(String first,String last,double s,double c,int q) {
super(frist,last); setSalary(s);
setCommission(c); setQuantit(q); }
2
public voids setQusntily(double s) {
salary=(s>0?q:0); }
public double setCommission(double c) {
commission=(c>0?c:0); }
public double earnings() {
return salsry+commission+quantity; }
pulic String toString() {
return“CommissionWorker”+super.tostring(); } }
//定义PieceWorker类,为Employee的子类 final class PieceWorker extends Employee {
private double wagePiece; private int quantity;
public PieceWorker(String first,String last,double w,int q) {
super(first,last); setWage(w); setQuantity(q;) }
public void setWage(double w) {
wagePerPiece=(w>0?w:0); }
public void setQuantity(int q) {
return quantity+wafePerPiece; }
public String toString() {
return “PieceWoeker”+super.toString(); } }
定义HourlyWorker类,为Employee的子类 class HourlyWorker extends Employee {
3
private double wage; prvate double hours;
public HourlyWorker(String first,String last ,double w,double h) {
super(first,last); setWage(w); serHouts(h); }
public void setWage (double w) {
wage=(w>0?w:o); }
public void setHours(double h) {
hours=(h>=0&&h<168?h:0); }
public double earnings() {
return “HourlyWorker”+super.toString(); } }
class Text {
public static void main(string args[ ]) {
//使用超类声明ref Employee ref;
String output=“”; //分别定义各子类
Boss b=new Boss(“Hohn”,“Smith”,800.00);
CommissionWorker c=new CommissionWorker(“Sue”,“Hones”,400.00,3.0,150); PieceWorker p=new PieceWorker(“Bob”,“Lewis”,2.5,200);
HourlyWorker h=new HourlyWorker(“Karen”,“price”,13.75,40);
//使用子类分别实例化 ref=b;
out+=ref.toString()+“earned $”+ref.earnings+“\\n”+b.toString()+“earned $”+b.earnings+“\\n”; System.out.print(output); ref=c;
out+=ref.toString()+“earned $”+ref.earnings+“\\n”+c.toString()+“earned $”+c.earnings+“\\n”; System.out.print(output); ref=p;
out+=ref.toString()+“earned $”+ref.earnings+“\\n”+p.toString()+“earned $”+p.earnings+“\\n”; System.out.print(output); ref=h;
4
out+=ref.toString()+“earned $”+ref.earnings+“\\n”+h.toString()+“earned $”+h.earnings+“\\n”; System.out.print(output); }
}
⒊ 包的建立与使用
(1) 编辑Calculate.java,设保存在D:\\myjava目录下。 package mypackage; public class Calculate {
private int a;
public Calculate(int a) {this.a=a;
System.out.printl(“from constrartion”+this.a); }
public double volume(double height,double width,doule depth) {
return height*width*depth; }
int add(int x, int y) {
return x+y; }
protected void a() {
System .out.println(“from constration”+a); } }
编译,查看D:\\myjava目录下是否生成了myoackage文件夹,在该文件夹中是否有Calculate.class文件。
(2) 编辑Interfaceclass.java,设保存在D:\\myjava目录下。 import mypackage.Calculate; class PackageDemo {
public static void main(string ags[ ]) {
Calculate c=new Calculate(10); double s=c.volume(5,6,7); System.out.println(s); //int b=c.add(5,6); //c.a(); } }
5
3.定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。
定义接口DiagArea,其中包含方法double getDiagonal()求对角线长, double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。
4.(第3题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义主类、主方法,在main方法中构造3个对象,调用showArea方法;定义接口DiagArea,其中包含方法double getDiagonal(),在主main方法中输出方法执行结果。 六、自做作实验
1.定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。
2创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。
3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。
6
1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资
2) 定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
3) 创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 提示:
1)定义两个接口,分别在其中申明两个方法。 2)定义主类Graduate,实现这两个接口。 3)定义主类的成员变量,和构造方法。 4)给出四个接口方法的实现。
5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。
6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法。
7
正在阅读:
Java实验五03-15
2018年高中化学人教版必修2全套精品导学案: 第三章 第3节 第二课时 乙酸最全版01-06
麦肯锡经典课程:七步成诗05-25
宽带直流放大器论文04-21
无锡十三五规划农业发展报告06-01
研究报告-2018-2023年中国芳纶纤维行业市场深度调研研究及投资机04-26
浅谈提高双向HDPE钢塑土工格栅无面板加筋挡土墙施工质量措施 -03-01
030.浅谈隧洞超前管棚施工工艺04-27
《咬文嚼字》01-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 实验
- Java
- 初二数学八上第十三章轴对称知识点总结复习和常考题型练习
- 黄河流域水资源管理 - 图文
- 钛合金 - 图文
- 医保硬件系统升级方案
- 数据结构实验四 串操作
- 安徽电信网上营业厅整站合作运营方案 - 图文
- 关于工程项目采用BT模式的理解及利弊分析
- 测量平差试卷1
- 软考系统集成项目管理工程师案例分析内部精华笔记及历年考题解析最新版
- 烟台2017届高三三月份语文尚雯婕作文阅卷分析
- 研究所科研机构薪酬管理制度
- 色谱分析试题
- 实验1-继承
- 用比例解复杂的分数应用题 - 图文
- 2016年度太仓市会计人员继续教育计划试题大全
- 仓库安全试题
- 西安南750kV变电站330kV送出工程 - 图文
- arcgis空间内插教程(实例教程,超详细) - 图文
- 2018年河北省中考数学试题及参考答案(word解析版)
- PhotoShop作业与答案(解答) - 图文