JAVA实验报告二 下载本文

内容发布更新时间 : 2024/5/25 17:38:10星期一 下面是文章的全部内容请认真阅读。

精选文库

3. 掌握上转型对象的使用,多态的特性

定义一个抽象(abstract)类,类名为Employee。 Employee的子类有YearWorker、MonthWorker和WeekWorker。YearWorker对象按年领取薪水(每年10万),MonthWorker对象按月领取薪水(每月1万),WeekWorker对象按周领取薪水(每周0.5万,设定一个月4周)。Employee类有一个抽象(abstract)方法:

public abstract double earnings();

子类必须重写父类的earnings()方法,给出各自领取每年报酬的具体方式。

有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象、MonthWorker对象、WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。 请按模版要求,将代码补充完整。

abstract class Employee {

public abstract double earnings(); }

class YearWorker extends Employee {

//重写earnings()方法【补充代码…】

public double earnings(){ return 100000; } }

class MonthWorker extends Employee {

//重写earnings()方法【补充代码…】

public double earnings(){ return 10000; } }

class WeekWorker extends Employee {

//重写earnings()方法【补充代码…】

public double earnings(){ return 5000; } }

class Company {

Employee[] employees;

11

精选文库

double salaries = 0;

Company(Employee[] employees) { this.employees = employees; }

public double salariesPay() { salaries = 0;

//计算salaries【补充代码…】

for (int j = 0; j < employees.length; j++){ salaries+=employees[j].earnings(); }

return salaries; } }

public class HardWork {

public static void main(String[] args) { Employee[] employees = new Employee[20];

for (int i = 0; i < employees.length; i++) { if(i%3==0)

employees[i] = new WeekWorker(); else if(i%3==1)

employees[i] = new MonthWorker(); else if(i%3==2)

employees[i] = new YearWorker(); }

Company company = new Company(employees);

System.out.println(\公司年工资总额:\ + company.salariesPay());

} }

运行结果:

公司年工资总额:705000.0

— 12

精选文库

4. 掌握嵌套类和内部类的概念和用法

编写一个程序要求定义一个外部类Outer,然后在Outer类中定义一个内部类Inner和局部类Local,内部类Inner和局部类Local的任务都是显示出外部类中的数组元素,然后求出这些数组元素的平均值。 请按模版要求,将代码补充完整。

class Outer {

private int data[]; Outer(int x[]) { data = x; }

void checkInner() {

Inner innerObj = new Inner();

// 调用Inner对象的show()方法 【补充代码】 innerObj.show();

System.out.println(\内部类计算的平均值: \ + innerObj.average());

}

void checkLocal() { class Local { void show() {

System.out.print(\从局部类显示数组元素:\);

for (int i = 0; i < data.length; i++) { System.out.print(data[i] + \); }

System.out.println(); }

int average() { int sum = 0;

for (int i = 1; i < data.length; i++) { sum += data[i]; }

return sum/data.length; // 返回data数组的平均值【补充代码】

} }

Local localObj = new Local(); localObj.show();

System.out.println(\局部类计算的平均值: \ + localObj.average());

13

精选文库

}

class Inner { void show() { System.out.print(\从内部类显示数组元素:\); for (int i = 0; i < data.length; i++) {

// 打印data数组的每个元素【补充代码】

System.out.print(\+data[i]); }

System.out.println(); }

int average() { int sum = 0;

for (int i = 1; i < data.length; i++) { sum += data[i]; }

return sum / data.length; } } }

public class InnerClassTest {

public static void main(String[] args) {

int a[] = { 6, 8, 9, 22, 34, 7, 2, 1, 15 }; Outer outerObj = new Outer(a); outerObj.checkInner();

// 调用outerObj对象的checkLocal方法【补充代码】 outerObj.checkLocal(); } }

运行结果:

从内部类显示数组元素: 6 8 9 22 34 7 2 1 15 内部类计算的平均值: 10

从局部类显示数组元素:6 8 9 22 34 7 2 1 15 局部类计算的平均值: 10

实验总结:

— 14