2023年面向对象类继承与接口实验报告.docx
《2023年面向对象类继承与接口实验报告.docx》由会员分享,可在线阅读,更多相关《2023年面向对象类继承与接口实验报告.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验十类继承与接口(二)课程名称:面向对象程序设计实验项目名称:实验十类继承与接口(二)学生姓名:专业:学号:实验地点: 实验日期:年月【实验目的】1 .掌握Java类的继承特点,涉及子类声明、对象创建2 .掌握域的继承与隐藏的特点和用法3 .掌握方法的继承与重写的特点和用法【实验内容】一.改错题检查下面代码是否有错,假如有错,写明错误因素,并修正错误。(1)cla s s Aaain t i; Aaa()i=-1;, Aaa(int a) i = a;Aaa(double d) Aaa ( (int)d);是否犯错:是犯错因素(假如犯错):构造器调用构造器不能直接用名二.程序分析设计题下面各
2、个设计要放在各自的包中。1 .最初设计最初设计的所有类都放到firs t包中(1)员工类的设计假设公司有三种类型的员工:经理(manager),高级工(advanced w o rkc r ),普通 工人(no r mal worker) o先分别设计描述这三种类型工人的类,规定如下: 三个类的名称分别为 Mana g e r ,AdvanccdWo r k e r, N o r ma 1 Worker;每个类都有n a me(姓名),id (工号),a g e(年龄),worki n gAg e (工龄)等pr i vale 类型的实例变量,而每个实例变量都有pub I i c类型的g e
3、t和s ct方法。 每个类都要定义构造器,涉及无参数构造器和至少一个有参数构造器(用于对实例变量 赋初值)每个类都要定义一个p u blic型的salary方法,用于计算员工对象的每月薪水,并返回计 算结果,工资计算逻辑是:底薪+工龄工资。比如,经理的底薪是20230,此外根据工龄 每年加2 0 0元;高级工的底薪是10000元,另加每年100元的工龄工资;普通员工的底 薪是8000,另加每年8 0元的工龄工资。 其余功能可以自行考虑p u bi i c c 1 as s Man ager 定义name, id, a ge,wor k i ng Age等private类型的实例变量定义两个构造
4、器,无参数构造器和有参数构造器puhl i c Ma nag er(String nam e ,S t r i ng idjnt age, i nt wor k in g A g补充对象初始化代码*/定义每个实例变最的pu b 1 ic类型的get和set方法。p u bli c doub 1 e sa 1 a ry()/* 代码补充*/p u bl i c cl a ss Adv ancedW o rke r 类似 Ma n agcr)p u bl i c cla s s Norma 1 Wo r k er 类似 Manager)(2)公司类的设计公司类用于描述公司,规定如下:类名:Com
5、p any设计公司的P ri v at e实例变量有:公司名称(nam e兀三个员工对象数组(分别描述经理 们、高级工们、普通员工们)等,针对这些实例变量分别提供get和set方法。注意:为 了简化设计,这些员工对象数组的创建不在Company对象内部,而是通过有参数构造 器或者s e t方法从Company对象外部赋值到C o mpany对象内部。 提供构造器:涉及无参数构造器、两个有参数构造器(个要对所有实例变量初始赋值, 此外一个只需要对name赋值)。 设计实例方法totals alary,计算返回所有员工的工资,即对三个员工对象数组分别循 环累计汇总工资其余功能可以自行增长publi
6、c c 1 ass C ompan y /priv a to 实例变量,涉及 name,以及 advan c cd Work e rs, norm a IWo r kers 两个对象数组/ M a nager对象数组作为示例,下面已经给出p r iv a te Manager1 ma n ag e r s ;设计无参数构造器/两个有参数构造器(一个要对所有实例变量初始赋值,此外一个只需要对n ame赋值)。C ompany(S( r in g namc,Managcr ma n age r s, A d va n ccdWorkcrf a d van c edWorke r s. Norm a
7、l Work e r nonna 1 Worker s )0/ /初始化代码)每个实例变量的get和set方法p u b 1 ic do u bl e toialSalary()记录经理们的工资总额:通过循环调用managers i的sal a ry方法,然后累加/ /记录高级工们的工资总额:通过循环调用a d van c edW o rkers i的salary方法,然后累 加记录普通工们的工资总额:通过循环调用no r m a lWorkersi的s a 1 a ry方法,然后累加返回上述三个工资总额的合计值(3)测试类p ubli c cla s s Te s t(pu b lie s
8、ta t ic void m a in( St r ing ) ar g s)Ma n ag e r manage r s=new M a na g e r2;/卜面示例两行代码手工创建Manager对象,并分别对man a gers的两个元素赋值managers 0 = new Man a g er(王一”,001”,3 0 ,10):ma n agersf 11 = new Man a ger(张二,002”,40, 15);AdvancedWorker ) a d vanccdW o rkers = new Adva n ccdWorkcr4;参考上述代码,创建Adva need Wor
9、ker对象,并分别对ad v ancedWo r k e rs的4个 元素赋值Norm a IWork e r normalWorke r s = new NormalW o rker 8;/同上,手工创建No r malW o rke r对象,并分别对normal Wo r k e r s的8个元素 赋值符上述三个员工对象作为参数传递到Com pan y对象内部。Company compa n y =new Compa n y (“公司名字,mana g er s , adv a n cedWo r kers,n o rma 1 W o r k ers ); Sys t em.o u t.p
10、r i ntln (公司年工资总额:+comp a ny. t o t al S alaryO); 输出公司 工资总额).改善设计:运用类的基础和上转型重新设计现在对前面的最初设计进行改造。本次所有类都放到s e co nd包中。(1)设计员工类的继承结构前面的最初设计中,一个重要的缺陷就是代码反复,就是三种类型的员工类有许多反复 的代码,这时可以通过设计继承结构,将这些反复代码放到超类中,缓解代码反复问题。规定设计如下: 设H一个Wo r k c r类,该类描述员工,作为经理(man a g e r),高级I:(ad v anced worker),普通工人(n o rmal wo r k
11、er)的共同的超类。 Wo r ker类提供子类的公共功能,即将子类的反复代码或类似代码移到W。rker类中。比如,: W ork e r类需要定义name (姓名),id (工号),ag e (年龄),workin g A g e (工 龄)等p r ivate类型的实例变量,而每个实例变量都有public类型的g e i和se t方 法。 Worker类定义两个构造器,涉及无参数构造器和一个有参数构造器(用于对四个实例变量赋初值)Wo r ke r类定义一个pub 1 ic型的salar y方法,用于计算员工对象的每月薪水, 具体代码在将来的子类中重定义(现在只需要返回0)。 三个子类 M
12、an a ger、A d v a n cedWor k er Norm a IWork e r 从 Worker 类继承,规定: 每个子类定义各自的构造器,规定同最初设计,注意通过构造器调用链重用超类构 造器的代码(即通过s upcr调用超类构造器) 每个类都各自重定义Worker类的salary方法,用于计算员工对象的每月薪水,具体计算逻辑(与最初设计相同):底薪+工龄工资。比如,经理的底薪是2 023 0, 此外根据工龄每年加2 00元;高级工的底薪是1000 0元,另加每年100元的工龄 工资;普通员工的底薪是8 000,另加每年80元的工龄工资。 其余功能可以自行考虑p ublic c
13、l a s s Worker定义name, id,a g e .workingAge等private类型的实例变量定义两个构造器,无参数构造器和有参数构造器pu b 1 ic W o rker( S trin g name, S tri ng i d ,i n t age, in t wo r king A ge)/*补充对象初始化代码*/)/定义每个实例变量的pub 1 ic类型的get和set方法。P ublic d o u ble salaiy()return 0; 具体的计算方法由子类重定义。)p u b 1 ic cla s s M a n a g e r extends Wo r
14、ke r pu b lie M a na g er (String name, S tring id, i n t age, in t w o rk i n gAgc)/*补充对象初始化代码,调用抄类构造器的代码”)p u b 1 i c Manager ()/*补充对象初始化代码*/)p u bl i c d o u ble salary () r cturn 0; / /根据经理的工资计算逻辑重定义方法。/ /Advanc e dW o rker Norma 1 Wo r ker 两个类的代码与 Manager 类似(2)重新设计公司类在最初设计的Compan y类的基础上,将代码改造,规
15、定如下:类名:Company重新设计公司的实例变量,定义private实例变量:公司名称(n ame),W。r k er对象数组 (workers),此处与前面的设计不同,仅仅设计一个超类Worker对象数组,而不是定义三个 不同的三个子类对象数组,然后针对这些实例变量分别提供ge【和set方法。注意:为了 简化设计,这些员工对象数组的创建不在Company对象内部,而是通过有参数构造器或 者se t方法从Company对象外部赋值到Comp a ny对象内部。 提供构造器:涉及无参数构造器、两个有参数构造器(一个要对所有实例变量初始赋值, 此夕I、一个只需要对name赋值)。 设计实例方法t
16、ot a ISalary,计算返回所有员工的工资,即对workers对象数组循环 累计汇总工资(此处与最初设计不同,不用对三个子类数组分别循环记录)其余功能可以自行增长publ i c class Company(/ / priv a tc实例变量,涉及namepr i vateWork e r wo r kers ; /只需要定义1个超类类型的数组,不需要定义多个 子类对象数组设计无参数构造器/两个有参数构造器(一个要对所有实例变量初始赋值,此外一个只需要对n a me赋值) oC omp a ny(Strin g n a me, Wor k cr wor k e rs)对最初设计的代码进行
17、简化/初始化代码。每个实例变量的g e t和set方法pub 1 ic do u ble tot a 1S alary()对最初设计的代码进行简化/记录员工的工资总额:通过循环调用workers i 的sa la ry方法,然后累加返回上述三个工资总额的合计值。)(3)改写测试类在最初设计的Test类的基础上改写代码。pu b i i c c 1 a ss T es t pub 1 ic stat i c vo i d ma i n( S t ri n g arg s ) Wo r ker worke r s = n e v Worker 1 4;员工数量共 14 个/下面示例两行代码手工创建
18、Man a ger对象,并分别对man agers的两个元素赋值wor k e r s 0 = new M a na g e r (“王一”,“ 0 0 1 ”,30, 10); / / 创建子类 Manager 对象,并转型为超类workers 11 = n e w Ma n ager(“张二“,00 2”, 4 0 , 15);/含义同上/参考上述代码,用4行代码分别创建Ad v a n c edWor k e r对象,并赋值给w o r k e r s的元素参考上述代码,用8行代码分别创建NormalWo r kcr对象,并赋值给wo r kc r s的 元素将上述三个员T.对象作为参数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 面向 对象 继承 接口 实验 报告
限制150内