内容发布更新时间 : 2024/12/24 21:07:35星期一 下面是文章的全部内容请认真阅读。
精选文库
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