实验四 面向对象高级技术

更新时间:2023-10-11 17:24:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验四

一、有一个abstract类,类名为Employee,其子类有YearWorker、MonthWorker、WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水、WeekWorker按周领取薪水。Employee类有一个abstract方法:public abstract earnings();子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。

有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。 程序模板

按模板要求,将[代码]处替换为Java程序代码。 HardWork.java

abstract class Employee { public abstract double earnings(); }

class YearWorker extends Employee { [代码1] //重写earnings()方法 }

class MonthWorker extends Employee { [代码2] //重写earnings()方法 }

class WeekWorker extends Employee { [代码3] //重写earnings()方法 }

class Company { Employee[] employee; double salaries=0;

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

public double salariesPay() { salaries=0;

[代码4] //计算salaries return salaries; } }

public class HardWork {

public static void main(String[] args) { Employee[] employee=new Employee[20]; for(int i=0;i

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

employee[i]=new MonthWorker();

else if(i%3==2)

employee[i]=new YearWorker(); }

Company company=new Company(employee);

System.out.println(\公司年工资总额:\ } }

二、运行下面的程序,理解成员变量的继承与隐藏。 import java.io.*; class sum_3{

int sum,num1,num2; static int num3;

//定义构造函数初始化对象 sum_3(){ num1=0; num2=0; num3=0; sum=0; } }

class sub_sum3 extends sum_3{

int sum,num1,num2; //隐藏父类sum_3中的实例变量 static int num3; //隐藏父类sum_3中的类变量 void sum(int i,int j,int k){ num1=i; num2=j; num3=k;

sum=num1+num2+num3; } }

public class computing{

public static void main (String arg[]){ sub_sum3 m1=new sub_sum3(); m1.sum(100,200,300);

System.out.println(\ } }

三、运行下面的程序,理解方法的继承。 class Sort3{

double max1,max2,max3; Sort3(){ max1=-1; max2=-1;

max3=-1; } void sort(){ double s; if (max1

if (max1

if (max2

class sub_Sort3 extends Sort3{

void subsort(double i,double j,double k){ max1=i; max2=j; max3=k;

sort(); //调用父类中的方法sort() } }

public class Class1{

public static void main (String args[]){ sub_Sort3 m1 = new sub_Sort3(); m1.subsort(100,200,300);

System.out.println(\三个数从大到小为:\ } }

四、运行下面的程序,理解方法的重载。 class Sort2or3{

double max1,max2,max3; Sort2or3(){ max1=-1; max2=-1; max3=-1; }

void sort(double i,double j){ double s; max1=i; max2=j; if(max1

} }

void sort(double i,double j,double k){ double s; max1=i; max2=j; max3=k; if (max1

if (max1

if (max2

public class Class1{

public static void main (String args[]){ Sort2or3 m1 = new Sort2or3(); m1.sort(100,200);

System.out.println(\两个数从大到小为:\ m1.sort(50,150,100);

System.out.println(\三个数从大到小为:\ } }

五、运行下面的程序,理解方法的覆盖。 class sort_Demo{ int i,j,k,swap; sort_Demo(){ i=j=k=swap=0; }

void sort(int t1,int t2[]){ //父类中的方法用来实现升序 //用选择法按升序排列 for(i=0;i

for(j=i+1;j

} } }

class sub_sort_Demo extends sort_Demo{

void sort(int t1,int t2[]){ //子类中的方法实现降序 //用选择法实现降序排列 for(i=0;i

for(j=i+1;jt2[k]) k=j; if (k!=i){ swap=t2[i]; t2[i]=t2[k];

t2[k]=swap; } } } }

public class Class1{

public static void main (String args[]){ int a[]={34,12,8,67,88,23,98,101,119,56}; sort_Demo m1=new sort_Demo();

sub_sort_Demo m2=new sub_sort_Demo(); System.out.println(\排序前的数据为:\ for (int i=0;i<10;i++)

System.out.print(\\ //调用父类中的sotr()方法 m1.sort(a.length ,a);

System.out.println(\按升序排列的数据为:\ for (int i=0;i<10;i++)

System.out.print(\\

//调用子类中的sort()方法,该方法实现了对父类中方法的覆盖 m2.sort(a.length ,a);

System.out.println(\按降序排列的数据为:\ for (int i=0;i<10;i++)

System.out.print(\\} }

六、编程

1、编写Manager类,该类继承于本章中的Employee类(参照后面附注)

(1)为其添加: 两个属性:办公室officeID和年终分红bonus; 1构造器方法:带有4个参数的构造器方法,用于对除bonus属性外的所有其它属性进行初始化; 方法:officeID属性和bonus属性的相关set和get方法; (2)重写Employee类中的方法raiseSalary(double proportion),经理涨工资的计算方法为在雇员工资涨幅的基础上增加10%的比例。

2、编写TemporaryEmployee(临时工)类,该类继承于Employee类 (1)为其添加: 1个属性:雇佣年限hireYears; 构造器方法:用于初始化该类的所有属性; 方法:hireYears属性的set和get方法; (2)重写Employee类中的方法raiseSalary(double proportion),临时工的工资涨幅为正式雇员的50%。

3、编写题1和题2的测试程序

(1)创建一个长度为3的Employee类型的对象数组,数组元素分别为Employee对象、Manager对象和TemporaryEmployee对象;

(2)为所有雇员涨一次工资,涨幅为10%; (3)输出所有雇员的信息; 七、编程

1、编写一个Animal类,包含: 属性:private String type; //动物的类型 构造器: //用于初始化私有属性type 方法:public String toString( ) //返回动物类型的信息

public void sound( ) //输出动物的叫声信息 2、编写一个Flyable接口,包含:

方法:double flySpeed(); //用于返回最大的飞行速度

3、编写Glede(老鹰)类和Pigeon(鸽子)类,分别继承题4中的Animal类并实现题5中的Flyable接口;

4、编写测试类,打印输出老鹰和鸽子的叫声信息和最大飞行速度。 附注:

class Employee { String name; char sex; int age; double Salary; String department; //此处自己添加构造方法对几个属性作初始化 double raiseSalary(double proportion) {return Salary=Salary*(1+ proportion);} //此处添加你认为需要的方法,如输出雇员的信息的方法。 }

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

Top