实验五继承、抽象类和接口学号201617406 姓名刘顺专业网络工程成绩【实验目的与要求】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类变量Animal ani =new Cat("小猫"); 分别调用ani的shout()和eat()方法。
3、接口的定义和使用(1)定义一个USB接口标准,定义2个抽象方法:USB设备信息显示show();USB设备开始工作start();USB 设备停止工作stop();(2)定义U盘子类,class Flash implements USB实现USB接口标准,实现方法:USB接入产品信息show (“USB设备已经接入”);设备启动信息start(“USB设备已经启动”);设备停止动作信息stop(“USB设备已经停止”);(2)定义打印机子类,class Print implements USB实现USB接口标准,实现方法:打印机接入产品信息show (“打印机已经接入”);设备启动信息start(“打印机已经启动”);设备停止动作信息stop(“打印机已经停止”);(3) 定义Computer类,定义插入USB方法plugin(USB usb) ,调用接口方法,实现接口功能。
(4) 在主类中定义Computer 的对象,分别调用方法plugin(USB Flash)表示插入Flash优盘,plugin(USB print) 表示插入打印机。
【实验过程与结果】实验1:实验程序class Employee{ //父类(员工类)private String name; //私有成员变量姓名private double salary; //私有成员变量工资private String work; //私有成员变量工作//成员变量赋值public void setname(String name){=name;}public void setsalary(double salary){this.salary=salary;}public void setwork(String work){this.work=work;}//成员变量输出public void getname(){System.out.println("姓名:"+name);}public void getsalary(){System.out.println("工资:"+salary);}public void getwork(){System.out.println("工作:"+work);}}class Manager extends Employee{ //子类(经理类)private double bonus; //私有成员变量奖金private String work; //私有成员变量工作//成员变量赋值public void setbonus(double bonus){this.bonus=bonus;}//成员变量输出public void getbonus(){System.out.println("奖金:"+bonus);}//成员变量赋值public void setwork(String work){this.work=work;}//成员变量输出public void getwork(){System.out.println("经理工作:"+work);}}public class Company {public static void main(String[] args) {Employee p1=new Employee(); //实例化对象p1(员工)Manager p2=new Manager(); //实例化对象p2(经理)p1.setname("小明"); //员工姓名p1.setsalary(5000); //员工工资p1.setwork("编写程序"); //员工工作p1.getname(); //调用输出p1.getsalary(); //调用输出p1.getwork(); //调用输出System.out.println("***** ***分*** ***割*** ***线*** *****");p2.setname("小李"); //经理姓名p2.setsalary(5000); //经理工资p2.getname(); //调用输出p2.getsalary(); //调用输出p2.setbonus(2000); //经理奖金p2.setwork("管理项目"); //经理工作p2.getbonus(); //调用输出p2.getwork(); //调用输出// TODO自动生成的方法存根}}实验结果:仅供参考:实验分析本实验主要考查Java中类的继承和覆盖,其中包括方法的继承和变量的继承,方法的重写。
我先写了一个Employee雇员类,该类作为父类,在该类中定义了3个成员变量:name、 salary、 work,并分别为它们定义了set和get方法。
set方法为成员变量赋值,get方法输出成员变量信息。
之后又定义了Manager经理类,该类作为子类继承自Employee雇员类,在该类中定义了一个bonus成员变量,表示经理的奖金,重写work方法表示经理的工作,经理的其他信息都可继承自父类雇员类,且不需重写。
最后在主方法中,分别创建Employee雇员的对象P1和Manager经理的对象P2,调用set和get方法即可,输出其信息。
实验2:实验程序abstract class Animal{String name;public Animal(String name){=name;System.out.println("动物:"+name);abstract public void getname();abstract public void shout();abstract public void eat();}class Cat extends Animal {public Cat(String name) {super(name);}public void getname(){};public void shout(){System.out.println("猫叫:喵喵喵!");}public void eat(){System.out.println("猫喜欢吃:鱼!");}}class Dog extends Animal{public Dog(String name) {super(name);}public void getname(){}public void shout(){System.out.println("狗叫:汪汪汪!");}public void eat(){System.out.println("狗喜欢吃:骨头!");}}public class Zoon {public static void main(String[] args) {Animal ani1 =new Cat("小猫");ani1.shout();ani1.eat();Animal ani2 =new Dog("小狗");ani2.shout();ani2.eat();// TODO自动生成的方法存根}实验结果:参考结果:实验分析在本实验中,主要是考查对抽象类的定义和使用。
相对来说和上一实验的继承有同源方法,理解上更简单。
首先,我定义了一个抽象类Aniaml,可以理解为他就是父类,通过构造方法得到动物名字并输出,同时定义抽象方法shout()表示叫声,定义抽象方法eat()表示食物。
而后我又定义了Cat类和Dog类均继承自Animal类,也可以理解为他们是Animal类的子类,可以直接调用父类的构造方法输出名字。
调用实现抽象方法shout和抽象方法eat。
最后在主方法中,实例化“小猫”和“小狗”的对象ani1和ani2,并向上转型赋给Aniaml类变量,分别调用ani1和ani2的shout()和eat()方法即可。
实验3:实验程序interface USB{abstract void show();abstract void start();abstract void stop();}class Flash implements USB{public void show(){System.out.println("USB设备已经接入");}public void start(){System.out.println("USB设备已经启动");}public void stop(){System.out.println("USB设备已经停止");}}class Print implements USB{public void show(){System.out.println("打印机已经接入");}public void start(){System.out.println("打印机已经启动");}public void stop(){System.out.println("打印机已经停止");}}class Computer{void plugin(USB usb){usb.show();usb.start();usb.stop();}}public class Interface {public static void main(String[] args) {Computer p1=new Computer();p1.plugin(new Flash());p1.plugin(new Print());}}实验结果:参考结果实验分析本实验主要考查接口的定义和使用。