课程名称《面向对象程序设计》实验项目编号1505P00180101实验项目名称继承与多态实验学时2学时实验日期2017.12.11成绩学生学号20160501230学生姓名陈靖实验地点计算机应用技术实验室指导教师康晓凤一、实验目的1.掌握Java语言中继承和多态的相关概念2.掌握Java程序设计中继承和多态机制的使用3.掌握Java语言中接口和包的概念及使用。二、实验内容1.题目:1.继承多态综合练习1(1)建立一个Java抽象类Drink,应当:①声明一个抽象方法taste(),该方法负责输出饮料的味道;②声明int型常量来代表不同的饮料类型(咖啡、啤酒、牛奶),如:③声明静态方法getDrink(intdrinkType),根据传入的参数创建不同的饮料对象,并返回该对象,建议使用switch语句。(2)建立Drink的子类:①分别建立Drink的子类:Coffee(咖啡类),Beer(啤酒类),Milk(牛奶类);②实现taste()方法,要求在控制台打印各自的味道特征。(3)建立Test测试类,测试以上内容的正确性①编写main方法,输入要新建的饮料类型。②调用Drink类的getDrink方法,获得相应的饮料对象。然后调用该饮料对象的taste()方法,输出该饮料的味道。②编译程序,并运行。要求:测试类放在包名为com.sy4.exe02.test包中,其它类放在com.sy4.exa02包中。(知识点:类的定义,抽象类,继承,多态)2.继承多态综合应用练习2(1)定义一个抽象的People类,有姓名(name),年龄(age),性别(sex)等成员变量,要求成员变量的访问修饰符为private,通过getXxx()和setXxx()方法对各变量进行读写。声明具有一个抽象的role()方法,该方法不返回任何值,用于输出人的身份类型,同时至少定义两个构造方法。(2)定义一个抽象类Employee类,该类继承People类,该类具有People类的所有成员,并新增雇员底薪薪水(salary)和职工编号(empid)成员变量。同样要有至少两个构造方法,要体现出this和super的几种用法。声明具有一个抽象的getSalary()方法,该方法返回float值,用于返回员工薪水。(3)定义SalariedEmployee类,它是Employee的子类,拿固定工资的员工,他的薪水就是底薪。重写role和getSalary方法。(4)定义HourlyEmployee类,它是Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。新增属性:每小时的工资(hourSalary)、每月工作的小时数(hourWork)。重写role和getSalary方法。(5)定义SalesEmployee类,它是Employee的子类,销售人员,工资由月销售额和提成率决定。新增属性:月销售额(saleMoney)、提成率(rate)(6)定义一个类Company,在该类中写一个方法print(Employeee),调用该方法可以打印出某个员工的工资数额以及该员工的身份类型,写一个测试类CompanyTest在main方法,把若干各种类型的员工放在一个Employee数组里,并调用print方法输出数组中每个员工当月的工资。要求:测试类放在包名为com.sy4.exe02.test包中,其它类放在com.sy4.exa02包中。(知识点:类的定义,抽象类,继承,多态)3.继承多态综合应用练习3(1)定义一个驾驶员抽象类Driver,它有Stringsex(性别)和intage(年龄)两个成员属性,还有一个抽象的成员方法drives(Vehiclev),并从它派生出女驾驶员FemaleDriver和男驾驶员MaleDriver两个子类。(2)定义一个抽象类Vehicle,它有Stringvtype(车型)和Stringvcode(车牌号码)两个成员属性,还有一个抽象的成员方法drivedByDriver(Driverwho),并从它派生出Bus和Car两个子类。(3)定义一个测试类DriverTest,在其main方法中先创建fd和md两个男女Driver对象,然后创建vb和vc两个汽车类Vehicle对象。要求:(1)将以上所有类均放置到com.sy4.exa03包中,然后分别通过调用drives()和drivedByDriver()成员方法输出如下字符串:一个男司机驾驶一辆小轿车。一个女司机驾驶一辆公交车。(2)在com.sy4.exa03.test包中新建一个DriverTest测试类。在该类的main方法中先创建20个Vehicle对象(随机生成车牌号,车牌号范围为1~1000),并规定只有双号车辆能够通过,输出所有车辆的通过情况。要求:测试类放在包名为com.sy4.exe03.test包中,其它类放在com.sy4.exa03包中。4、设计一个具有各种功能门的系统。(1)定义一张抽象的门Door,对于门来说,拥有开门openDoor()和关门closeDoor()的操作,定义抽象方法StringdoorType()返回门的类型(如防火门、防盗门等)(2)定义具有防盗--theftproof()、防水--waterproof()、防弹--bulletproof()、防火等功能的接口(3)创建防盗门类、防水门类、防弹门类、防盗和防水门类(4)定义一个测试类DoorTest,在其main方法中创建各种门的对象,输出门的功能及门的类型。(知识点:抽象类,接口,继承,多态)要求:测试类放在包名为com.sy4.exe04.test包中,其它类放在com.sy4.exa04包中。三、实验源代码1、Drink类packagecom.sy4.exe01.test;publicabstractclassDrink{staticinta=1,b=2,c=3;//a:咖啡,b:啤酒,c;牛奶staticpublicintgetDrink(intdrinkType){switch(drinkType){case1:returna;case2:returnb;case3:returnc;}return0;}publicabstractvoidtaste();}offee类packagecom.sy4.exe01.test;publicclassCoffeeextendsDrink{publicvoidtaste(){System.out.print(咖啡的味道是苦的!);}}Beer类packagecom.sy4.exe01.test;publicclassBeerextendsDrink{publicvoidtaste(){System.out.print(啤酒的味道是苦的!);}}Milk类packagecom.sy4.exe01.test;publicclassMilkextendsDrink{publicvoidtaste(){System.out.print(牛奶的没有味道!);}}Text类packagecom.sy4.exe01.test;importjava.util.Scanner;importcom.sy4.exe01.*;publicclassText{publicstaticvoidmain(String[]args){inta;Scannerinput=newScanner(System.in);Coffeedrink=newCoffee();Beerdrink1=newBeer();Milkdrink2=newMilk();System.out.print(请输入饮料类型:(1:咖啡2:啤酒3:牛奶));a=input.nextInt();switch(drink.getDrink(a)){case1:drink.taste();break;case2:drink1.taste();break;case3:drink2.taste();break;}}}2、Pelple类packagecom.sy4.exe02.test;publicabstractclassPeople{privateintage;privateStringname,sex;publicPeople(){//无参构造方法age=0;name=0;sex=0;}publicPeople(intage,Stringname,Stringsex){//有参构造方法this.age=age;this.name=name;this.sex=sex;}publicvoidsetage(intage){this.age=age;}publicvoidsetname(Stringname){this.name=name;}publicvoidsetsex(Stringsex){this.sex=sex;}publicintgetage(){returnage;}publicStringgetname(){returnname;}publicStringgetsex(){returnsex;}publicabstractvoidrole();}Employee类packagecom.sy4.exe02.test;publicabstractclassEmployeeextendsPeople{floatsalary;Stringempid;publicEmployee(){super();salary=0;empid=0;}publicEmployee(floatsalary,Stringempid,intage,Stringname,Stringsex){super(age,name,sex);this.empid=empid;this.salary=salary;}publicabstractfloatgetSalary();}SalariedeEmployee类packagecom.sy4.exe02.test;publicclassSalariedEmployeeextendsEmployee{publicSalariedEmployee(floatsalary,Stringempid,intage,Stringname,Stringsex){super(salary,empid,age,name,sex);}publicfloatgetSalary(){returnsuper.salary;}publicvoidrole(){System.out.println(姓名:+super.getname()+\t年龄:+super.getage()+\t性别:+super.getsex()+\t薪水:+super.salary+\t编号:+super.empid);}}HourlyEmployee类packagecom.sy4.exe02.test;publicclassHourlyEmployeeextendsEmployee{floathoursalary;floathourwork;floatmoney;publicHourlyEmployee(Stringempid,intage,Stringname,Stringsex,floathoursalary,floathourwork){super(0,empid,age,name,sex);this.hoursalary=hoursalary;this.hourwork=hourwork;}publicfloatgetSalary(){if(hourwork=160)money=hoursalary*hourwork;elsemoney=(float)(hoursalary*160+(hourwork-160)*hoursalary*1.5);returnmoney;}publicvoidrole(){System.out.println(姓名:+super.getname