您好,欢迎访问三七文档
实验三面向对象程序设计的继承、多态等特性的练习编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。步骤(1):定义类Person,并添加以下公共域变量publicStringname;publiccharsex;publicintage;添加构造方法Person(Stringname,charsex,intage){……}步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法publicStringclassno;publicStringsno;publicvoidupdateAge(intage){……}voidtoString(){……}Student(Stringname,charsex,intage,Stringsno,Stringname){super(name,sex,age);…….}步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。源程序如下:classPerson{publicStringname;publiccharsex;publicintage;Person(Stringname,charsex,intage){this.name=name;this.sex=sex;this.age=age;}}classStudentextendsPerson{publicStringclassno;publicStringsno;publicvoidupdateAge(intage){this.age=age;}voidtostring(){System.out.println(name+'\t'+sex+'\t'+age+'\t'+classno+'\t'+sno);}Student(Stringname,charsex,intage,Stringclassno,Stringsno){super(name,sex,age);this.classno=classno;this.sno=sno;}}publicclassTestStudentPerson{publicstaticvoidmain(Stringarg[]){inti;Students[]=newStudent[5];s[0]=newStudent(邓林,'男',20,1002,201012135050);s[1]=newStudent(陶毕,'男',21,1001,201012135048);s[2]=newStudent(方芳,'女',20,1003,201012135047);s[3]=newStudent(王清,'女',21,1004,201012135056);s[4]=newStudent(单凡,'女',22,1001,201012135050);for(i=0;i=4;i++)s[i].tostring();}}输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。步骤(1):在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。源程序如下:classTestVirtualInvoke{staticvoiddoStuff(Shapes){s.draw();}publicstaticvoidmain(Stringargs[]){Circlec=newCircle();Trianglet=newTriangle();Linel=newLine();doStuff(c);doStuff(t);doStuff(l);}}classShape{voiddraw(){System.out.println(ShapeDrawing);}}classCircleextendsShape{voiddraw(){System.out.println(DrawCircle);}}classTriangleextendsShape{voiddraw(){System.out.println(DrawThreeLine);}}classLineextendsShape{voiddraw(){System.out.println(DrawLine);}}运行结果如下图:因为Java在使用上溯造型的情况下,子类对象可以当做父类对象,对于重载或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用,在doStuff()的代码里,调用draw()时,根据Shape句柄当时所引用对象的实际类型,会相应地采取正确的操作。在这里因为当Java编译器为doStuff()编译代码时,它并不知道自己要操作的准确类型是什么。但在运行时,却会根据实际的类型调用正确的方法。这就是通过虚方法调用(动态绑定)来实现的面向对象程序设计的“多态形性”。步骤(2):将Shape类定义为abstactclassShape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。源代码如下:classTestVirtualInvoke{staticvoiddoStuff(Shapes){s.draw();}publicstaticvoidmain(Stringargs[]){Shapec=newCircle();Shapet=newTriangle();Shapel=newLine();doStuff(c);doStuff(t);doStuff(l);}}abstractclassShape{abstractvoiddraw();}classCircleextendsShape{voiddraw(){System.out.println(DrawCircle);}}classTriangleextendsShape{voiddraw(){System.out.println(DrawThreeLine);}}classLineextendsShape{voiddraw(){System.out.println(DrawLine);}}运行结果如下图:由运行结果可知:与上面的结果一致。步骤(3):将Shape定义为interfaceShape{……},然后基于Shape接口实现类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。源代码如下:classTestVirtualInvoke{staticvoiddoStuff(Shapes){s.draw();}publicstaticvoidmain(Stringargs[]){Circlec=newCircle();Trianglet=newTriangle();Linel=newLine();doStuff(c);doStuff(t);doStuff(l);}}interfaceShape{publicvoiddraw();}classCircleimplementsShape{publicvoiddraw(){System.out.println(DrawCircle);}}classTriangleimplementsShape{publicvoiddraw(){System.out.println(DrawThreeLine);}}classLineimplementsShape{publicvoiddraw(){System.out.println(DrawLine);}}运行结果如下图:由运行结果可知:与上面的结果一致。3.思考题某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。这三类人员共同拥有的相关属性:姓名、编号;相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。要求:根据题意,自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写JavaApplcation程序实现功能:存储若干个职工信息,然后分行显示所有职工的姓名、编号、月工资等相关信息,另外计算所有职工的月薪总和并显示出来。源程序如下:abstractclassEmployee{Stringname;longno;staticlongid=1000;abstractdoublegetPay();Employee(Stringname){this.name=name;id=id+1;}};classManagerextendsEmployee{doublepay=8000;doublegetPay(){return8000;}Manager(Stringname){super(name);no=id;}publicStringtoString(){return姓名:+name+编号:+no+月薪:8000;}};classSaleextendsEmployee{longsaleNum;doublegetPay(){returnsaleNum*0.4;}Sale(Stringname,longsaleNum){super(name);no=id;this.saleNum=saleNum;}publicStringtoString(){return姓名:+name+编号:+no+月薪:+getPay();}}classTechextendsEmployee{longsalaryHours;doublegetPay(){returnsalaryHours*100;}Tech(Stringname,longsalaryHours){super(name);no=id;this.salaryHours=salaryHours;}publicStringtoString(){return姓名:+name+编号:+no+月薪:+getPay();}};importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.Enumeration;importjava.util.Vector;publicclassEmployApp{publicstaticvoidmain(Stringargs[]){Vectorv=newVector();Employeeem;doublenumPay=0;Strings=;System.out.print(PleaseinputtheSalesGet:);try{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));s=in.readLine();}catch(IOExceptione){}inti=Integer.parseInt(s);Stringm=;System.out.print(PleaseinputtheWorkingHours:);try{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));m=in.readLine();}catch(IOExceptione){}intj=Integer.parseInt(m);v.add
本文标题:java实验三1
链接地址:https://www.777doc.com/doc-7149061 .html