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

本文来源:https://www.bwwdw.com/article/cb6v.html

Top