Java实验五.docx
《Java实验五.docx》由会员分享,可在线阅读,更多相关《Java实验五.docx(12页珍藏版)》请在冰豆网上搜索。
Java实验五
实验五继承、抽象类和接口
学号6姓名刘顺专业网络工程成绩
【实验目的与要求】
1、掌握Java中类的继承、变量继承、方法继承的思想和使用;
2、理解和掌握java中多态性的覆写和重载的区别和用法;
3、掌握抽象和接口的工作机制和用法;
4、实验后及时总结、归纳、分析,并完成实验报告。
【实验内容与要求】
1、继承和覆盖的使用
(1)编写Employee雇员类,在该类中定义了3个域:
name表示员工姓名,salary表示员工的工资,work表示工作:
“编写程序”,并分别为它们定义了set和get方法。
(2)编写Manager经理类,该类继承自Employee雇员类。
在该类中,定义了一个bonus域,表示经理的奖金,重写work方法:
“管理项目”。
(3)在主类中,创建Employee雇员和Manager经理对象,并为其赋值,输出其信息。
2、抽象类的定义和使用
(1)定义抽象类Aniaml动物抽象类,通过构造方法得到动物名字并输出;定义抽象方法shout()表示叫声;定义抽象方法eat()表示吃食。
(2)定义Cat类继承自Animal类,调用父类的构造方法输出猫的名字信息。
实现抽象方法shout(“猫叫:
喵喵喵!
”);实现抽象方法eat(“猫喜欢吃:
鱼”)。
(3)定义Dog类继承自Animal类,调用父类的构造方法输出狗的名字信息。
实现抽象方法shout(“狗叫:
汪汪汪!
”);实现抽象方法eat(“狗喜欢吃:
骨头”)。
(4)在主方法中,实例化“小猫”和“小狗”,并向上转型赋给Aniaml类变量Animalani=newCat("小猫");分别调用ani的shout()和eat()方法。
3、接口的定义和使用
(1)定义一个USB接口标准,定义2个抽象方法:
USB设备信息显示show();USB设备开始工作start();USB设备停止工作stop();
(2)定义U盘子类,classFlashimplementsUSB实现USB接口标准,实现方法:
USB接入产品信息show(“USB设备已经接入”);设备启动信息start(“USB设备已经启动”);设备停止动作信息stop(“USB设备已经停止”);
(2)定义打印机子类,classPrintimplementsUSB实现USB接口标准,实现方法:
打印机接入产品信息show(“打印机已经接入”);设备启动信息start(“打印机已经启动”);设备停止动作信息stop(“打印机已经停止”);
(3)定义Computer类,定义插入USB方法plugin(USBusb),调用接口方法,实现接口功能。
(4)在主类中定义Computer的对象,分别调用方法plugin(USBFlash)表示插入Flash优盘,plugin(USBprint)表示插入打印机。
【实验过程与结果】
实验1:
实验程序
classEmployee{//父类(员工类)
privateStringname;//私有成员变量姓名
privatedoublesalary;//私有成员变量工资
privateStringwork;//私有成员变量工作
//成员变量赋值
publicvoidsetname(Stringname){
=name;
}
publicvoidsetsalary(doublesalary){
=salary;
}
publicvoidsetwork(Stringwork){
=work;
}
//成员变量输出
publicvoidgetname(){
"姓名:
"+name);
}
publicvoidgetsalary(){
"工资:
"+salary);
}
publicvoidgetwork(){
"工作:
"+work);
}
}
classManagerextendsEmployee{//子类(经理类)
privatedoublebonus;//私有成员变量奖金
privateStringwork;//私有成员变量工作
//成员变量赋值
publicvoidsetbonus(doublebonus){
=bonus;
}
//成员变量输出
publicvoidgetbonus(){
"奖金:
"+bonus);
}
//成员变量赋值
publicvoidsetwork(Stringwork){
=work;
}
//成员变量输出
publicvoidgetwork(){
"经理工作:
"+work);
}
}
publicclassCompany{
publicstaticvoidmain(String[]args){
Employeep1=newEmployee();//实例化对象p1(员工)
Managerp2=newManager();//实例化对象p2(经理)
("小明");//员工姓名
(5000);//员工工资
("编写程序");//员工工作
();//调用输出
();//调用输出
();//调用输出
"********分******割******线********");
("小李");//经理姓名
(5000);//经理工资
();//调用输出
();//调用输出
(2000);//经理奖金
("管理项目");//经理工作
();//调用输出
();//调用输出
//TODO自动生成的方法存根
}
}
实验结果:
仅供参考:
实验分析
本实验主要考查Java中类的继承和覆盖,其中包括方法的继承和变量的继承,方法的重写。
我先写了一个Employee雇员类,该类作为父类,在该类中定义了3个成员变量:
name、salary、work,并分别为它们定义了set和get方法。
set方法为成员变量赋值,get方法输出成员变量信息。
之后又定义了Manager经理类,该类作为子类继承自Employee雇员类,在该类中定义了一个bonus成员变量,表示经理的奖金,重写work方法表示经理的工作,经理的其他信息都可继承自父类雇员类,且不需重写。
最后在主方法中,分别创建Employee雇员的对象P1和Manager经理的对象P2,调用set和get方法即可,输出其信息。
实验2:
实验程序
abstractclassAnimal{
Stringname;
publicAnimal(Stringname){
=name;
"动物:
"+name);
}
abstractpublicvoidgetname();
abstractpublicvoidshout();
abstractpublicvoideat();
}
classCatextendsAnimal{
publicCat(Stringname){
super(name);
}
publicvoidgetname(){
};
publicvoidshout(){
"猫叫:
喵喵喵!
");
}
publicvoideat(){
"猫喜欢吃:
鱼!
");
}
}
classDogextendsAnimal{
publicDog(Stringname){
super(name);
}
publicvoidgetname(){
}
publicvoidshout(){
"狗叫:
汪汪汪!
");
}
publicvoideat(){
"狗喜欢吃:
骨头!
");
}
}
publicclassZoon{
publicstaticvoidmain(String[]args){
Animalani1=newCat("小猫");
();
();
Animalani2=newDog("小狗");
();
();
//TODO自动生成的方法存根
}
}
实验结果:
参考结果:
实验分析
在本实验中,主要是考查对抽象类的定义和使用。
相对来说和上一实验的继承有同源方法,理解上更简单。
首先,我定义了一个抽象类Aniaml,可以理解为他就是父类,通过构造方法得到动物名字并输出,同时定义抽象方法shout()表示叫声,定义抽象方法eat()表示食物。
而后我又定义了Cat类和Dog类均继承自Animal类,也可以理解为他们是Animal类的子类,可以直接调用父类的构造方法输出名字。
调用实现抽象方法shout和抽象方法eat。
最后在主方法中,实例化“小猫”和“小狗”的对象ani1和ani2,并向上转型赋给Aniaml类变量,分别调用ani1和ani2的shout()和eat()方法即可。
实验3:
实验程序
interfaceUSB{
abstractvoidshow();
abstractvoidstart();
abstractvoidstop();
}
classFlashimplementsUSB{
publicvoidshow(){
"USB设备已经接入");
}
publicvoidstart(){
"USB设备已经启动");
}
publicvoidstop(){
"USB设备已经停止");
}
}
classPrintimplementsUSB{
publicvoidshow(){
"打印机已经接入");
}
publicvoidstart(){
"打印机已经启动");
}
publicvoidstop(){
"打印机已经停止");
}
}
classComputer{
voidplugin(USBusb){
();
();
();
}
}
publicclassInterface{
publicstaticvoidmain(String[]args){
Computerp1=newComputer();
(newFlash());
(newPrint());
}
}
实验结果:
参考结果
实验分析
本实验主要考查接口的定义和使用。
接口(interface)和抽象类(abstract)都可以理解为继承的衍生,接口和抽象类的使用十分相似。
在本实验中,我首先定义了一个USB接口(类比于抽象类),和3个抽象方法,USB设备信息显示show(),USB设备开始工作start(),USB设备停止工作stop()。
而后我又定义了U盘子类和打印机子类,并重写show()、start()和stop()方法,实现抽象方法。
而后又定义了了Computer类,定义插入USB方法plugin(USBusb),即调用接口的方法,从而能够实现接口功能。
最后在主方法中实例化Computer的对象,分别调用方法实现设备的接入和停止。
【实验心得与体会】
本实验主要考查Java中类的继承、多态性的覆写和重载的区别和用法以及抽象类和接口的用法。
我觉得最重要的是类的继承。
类的继承应该是基础,只有学会了继承,才有可能理解抽象类和接口。
起初对于抽象类和接口我也有点不是特别理解,但是在调代码的过程中我发现,其实抽象类和接口有异曲同工之妙。
都是相当于继承的衍生,先写一个父类,再通过子类调用父类的成员变量和方法。
实现过程中先写一个大类(父类),方法为抽象方法,即只有方法格式方法头,没有实际功能,再写若干子类,在子类中实现抽象方法,即写出方法体。
在这一过程中还用到了多态性的覆写。
多态性的覆写主要是为了实现父类中的方法的功能,跟方法的重载也有相似之处。
在主方法中实例化对象的时候,可能还会用到向上转型和向下转型。
感谢老师在实验过程中的指导与帮助,谢谢老师。