当前位置:文档之家› 第五章 Java类的继承、包及接口

第五章 Java类的继承、包及接口

第5章类的继承、包及接口在前一章的实验中已经了解了类的基本构成、对象的创建及重载方法的应用等。

本章实验的任务主要是了解Java中类的继承、类包、内部类、匿名类及接口的基本构成及应用。

5.1 实验一:类的继承1. 实验目的1)正确理解Java中类继承基本概念及思想;2)基本掌握继承类和被继承类(子类和父类)之间的关系,正确地创建继承类。

2. 实验要求正确地划分类,根据类之间的关系,确定父类和子类,掌握覆盖方法的应用,完成类程序的编写与调试。

3. 实验内容在上一章的实验中,建立了公司职员信息类,现在需要处理职员的工资信息,建立职员工资类。

实验示例5.1.1 创建职员工资类Payroll类。

实现该示例的方法步骤如下:⑴首先分析一下该类的构成工资信息应包括职工的基本信息,因此可以把Employers类作为Payroll类的父类,Payroll类继承了父类所有的成员变量和方法,因此在Payroll类中需要定义的内容是:①成员变量对于工资信息项应该包括basicWage(基本工资)、positionWage(职位工资)、extraWage(附加工资)、other(其他补贴)等等。

它们均可声明为int (整数类型)。

②成员方法常常需要显示或获得全部或某些项工资的信息,因此需要定义如下一些方法:display() 显示工资的全部信息;display(int value) 显示一项工资额;display(int value1, int value2) 显示两项工资额。

③构造方法如前所述,一个类能够有多个构造对象方法,视需要而定。

对Payroll类来说可以给出两个构造方法:Payroll () 构造无名对象;Payroll(String ID,String name,String sex,String birthday,String home,String address, String number,int basicWage,int positionWage,int extraWage,int other) 构造一般对象。

⑵根据上边分析和描述,按照类的构成,给出如下类程序代码:public class Payroll extends Employers{int basicWage; //定义基本工资int positionWage; //定义职位工资int extraWage; //定义附加工资int other; //定义其他项public void display() //显示信息方法{super.display(); //引用父类的display()方法System.out.println("基本工资:"+basicWage);System.out.println("职位工资:"+positionWage);System.out.println("附加工资:"+extraWage);System.out.println("其他项:"+other);System.out.println("工资总额:"+(basicWage+positionWage+extraWage+ other));} //显示所有信息方法结束public void display(int value1) //显示一项工资额{System.out.println("工号:"+this.number+" 该项工资额:"+value1);} //显示一项工资额方法结束public void display(int value1,int value2) //显示两项工资额{System.out.println("工号:"+this.number+" 两项工资额分别是:"+value1+"、"+value2);} //显示两项工资额方法结束public Payroll() //构造方法{super();//引用父类的构造方法basicWage=0;positionWage=0;extraWage=0;other=0;} //无参构造方法结束public Payroll(String number,String name,String sex,String birthday,String home,String address,String ID,int basicWage,int positionWage,int extraWage,int other)//构造方法{super(number,name,sex,birthday,home,address,ID);//引用父类的构造方法this.basicWage=basicWage;this.positionWage=positionWage;this.extraWage=extraWage;this.birthday=birthday;this.other=other;} //有参构造方法结束}⑶在完成了公用类(public)Payroll源程序文件Payroll.java的建立之后,编译它生成类文件(.class字节码文件),以便在应用程序中使用它。

⑷程序分析该类是Employers类的子类,在程序中,覆盖(重写)了父类中的一些方法(如display()等),并使用super关键词引用父类方法。

要注意在使用super引用父类成员方法和构造方法的区别。

在完成上边的实验之后,请认真阅读、理解程序,仿照上边的程序,完成下边的自由练习。

自由练习5.1以上一章自由练习中建立的学生信息类Students为父类,建立一个学生学期的成绩单类Results,可以包含7~10项成绩,并包含可显示若干项成绩的方法。

实验示例5.1.2 测试Payroll类,编写测试程序TestPayroll.java,创建Payroll对象,显示职员对象工资的相关信息。

完成该示例的方法步骤如下:⑴这是一个测试Payroll类的程序,在测试程序中,我们需要创建Payroll类的对象,然后分别执行对象的各个方法,以测试类的功能。

⑵根据示例题目的要求,可给出如下的程序代码:public class TestPayroll{public static void main(String [] args){/* 首先创建一个无名和有名对象,测试两个构造方法*/Payroll e1=new Payroll();Payroll e2=new Payroll("0110","孙仁","男", "1988.10.15","重庆","航海路21号","422401************",600,500,400,200);/*测试对象的成员方法*/System.out.println("-------无名对象----------");e1.display();System.out.println("-------有名对象----------");e2.display();="力士靓"; //修改无名对象的名字e1.sex="女"; //修改无名对象的性别e1.birthday="1989.12.30"; //修改无名对象的生日e1.number="0111"; //修改无名对象的职员号e1.basicWage=500; //修改无名对象的基本工资System.out.println("--------"++"的基本工资-------");e1.display(e1.basicWage);System.out.println("--------"++"的基本工资、职位工资-------");e2.display(e2.basicWage,e2.positionWage);}}⑶编译并运行程序,程序执行结果如错误!未找到引用源。

所示。

图5-1 示例5.1.2程序执行结果 ⑷ 程序及执行结果分析与思考在程序中以创建无名对象和有名对象队两个构造方法的功能进行了测试,对无名对象的部分属性(name 、sex 等)进行了赋值处理,然后对显示一项工资额和显示两项工资额的方法进行了测试。

需要注意的是,在方法引用中参数是一一对应的,其相应的类型必须一致,否则在编译时将会出现编译错误。

在程序中创建了Payroll 对象,好像并没有涉及Employers 对象,请分析思考一下,为什么?作为本实验的部分,完成如下的自由练习:自由练习5.2 仿照上边测试程序,编写程序,完成对自由练习5.1建立的Result 类的功能的测试。

5.2 实验二:包及包中类的引用1. 实验目的1)正确理解Java 中包的基本概念;2)基本掌握包的创建以及包中类的引用。

2.实验要求根据包、类之间的关系,设计类(父类、子类或一般类)将它们放入包中,完成类程序的编写与调试,掌握包中类的引用方法。

3.实验内容实验示例 5.2.1 创建一个简单的汽车(Car )组件包(其中包括车身车架合成、发动机合成、控制组件合成)。

⑴ 汽车组件简要分析大家知道汽车是一个抽象的概念,因为汽车的种类繁多,功能各异。

但不管何类汽车都包括如下组件:车身车架(含驾驶室)、发动机、控制组件(变速器、驱动桥、转向制动系统等)。

因此一辆汽车可以看成是若干部件的组合。

如果我们分别把它们划分为汽车部件类,可以简单地描述如下:车身车架(CarBody )类:属性可以有:型号、颜色、轮胎个数等;动作有开门(open),关门(close);发动机(Engine )类:属性可以有:类型、功率等;动作有启动(start),关闭(close); 控制组件(ControlCompModule )类: 动作有:前进(forward)、倒退(backward),加速(quicken)、减速(slowDown)、停车(stop)等。

⑵ 根据如上简单分析,可以建立Car.java 源程序代码文件,分别定义各组件类,源程序参考代码如下:package car;/* 定义车身车架类*/class CarBody{String type; //声明类型String color; //声明颜色int tire; //声明轮胎数public void open(){System.out.println("车门已打开!");}public void close(){System.out.println("车门已关闭!");}public CarBody(String type,String color,int tire){this.type=type;this.color=color;this.tire=tire;}}/* 定义发动机类 */class Engine{String model; //声明发动机型号int power; //声明功率public void start(){System.out.println("发动机已发动!");}public void close(){System.out.println("发动机已关闭!");}public Engine(String model,int power){this.model=model;this.power=power;}}/* 以下定义控制系统类 */class ControlModule{public void forward(int speed){System.out.println("汽车以"+speed+"速度开始向前行进...");}public void backward(int speed){System.out.println("请注意:正在以"+speed+"速度倒车!");}public void stop(){System.out.println("已经停车!");}}⑶编译Car.java源程序代码,在car包中生成各个类的字节码文件,供其他应用程序使用。

相关主题