Java语言程序设计郑莉第四章课后习题答案.docx
- 文档编号:4684183
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:14
- 大小:105.57KB
Java语言程序设计郑莉第四章课后习题答案.docx
《Java语言程序设计郑莉第四章课后习题答案.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计郑莉第四章课后习题答案.docx(14页珍藏版)》请在冰豆网上搜索。
Java语言程序设计郑莉第四章课后习题答案
Java语言程序设计
第四章课后习题答案
1.子类将继承父类所有的属性和方法吗?
为什么?
答:
不,子类不能直接访问从父类中继承的私有属性及方法,但可以对公有及保护方法进行访问。
2.方法的覆盖与方法的重载有何不同?
答:
覆盖是运用在子类中实现与父类相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父类更多的事情;在子类中需要取消从父类继承的方法。
3.声明两个带有无参构造方法的两个类A和B,声明A的子类C,并且声明B为C的一个成员,不声明C的构造方法。
编写测试代码,生成类C的实例对象,并观察结果。
//A类
publicclassA{
publicA(){
System.out.println("输出A类");
}
}
//B类
publicclassB{
publicB(){
System.out.println("输出B类");
}
}
//C类
publicclassCextendsA{
Bb=newB();
}
//测试类
publicclasstest4_3{
publicstaticvoidmain(Stringargs[]){
Cc=newC();
}
}
运行结果:
4.声明一个基类A,它只有一种非默认构造方法;声明A的子类B,B具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法。
//A类
publicclassA{
publicA(Stringlin){
System.out.println("A类的非默认构造方法"+lin);
}
}//B类
publicclassBextendsA{
publicB(){
super("Fuckyourteacher");
System.out.println("B默认类构造方法");
}
publicB(Stringlin){
super(lin);
System.out.println("B类非构造方法");
}
}//测试类
publicclasstest4_4{
publicstaticvoidmain(Stringargs[]){
newB();
System.out.println();
newB("Fuckmyteacher");
}
}
运行结果:
5.声明一个类,它具有一种方法,此方法被重载三次,派生一个新类,并增加一种新的重载方法,编写测试类验证四种方法对于派生类验证四种方法对于派生类都有效。
//A类
publicclassA{
publicvoidshowTime(){
System.out.println("空重载");
}
publicvoidshowTime(intl){
System.out.println("整形参数重载");
}
publicvoidshowTime(charl){
System.out.println("字符参数重载");
}
}
//B类
publicclassBextendsA{
publicvoidshowTime(Stringl){
System.out.println("字符串参数重载");
}
}
//测试类
publicclasstest4_5{
publicstaticvoidmain(Stringargs[]){
Bb=newB();
b.showTime();
b.showTime(5);
b.showTime('f');
b.showTime("林楚金");
}
}
6.声明一个具有final方法的类,声明一个派生类,并试图对这个方法进行重写,会有什么结果。
//A类
publicclassA{
publicfinalvoidshowTime(){
System.out.println("类A中方法");
}
}
//B类
publicclassBextendsA{
publicvoidshowTime(){
System.out.println("类B中方法");
}
}
//测试类
publicclasstest4_6{
publicstaticvoidmain(Stringargs[]){
Bb=newB();
b.showTime();
}
}
运行结果:
(说白了就是B中showTime()的无法覆盖A中showTime(),被覆盖为final,不能覆盖。
)
7.声明一个final类,并试图声明其派生类,会有什么结果。
//A类
publicfinalclassA{
}
//B类
publicclassBextendsA{
}
//测试类
publicclasstest4_7{
publicstaticvoidmain(Stringargs[]){
Bb=newB();
}
}
运行结果:
(说白了就是无法从A中进行继承)
8.什么是抽象类?
抽象类中是否一定要包括抽象方法?
答:
抽象类是一个不完全的类,不能使用new方法进行实例化。
抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。
9.this和super分别有哪些特殊含义?
都有哪些种用法?
答:
this表示当前类;super表示调用父类。
在定义类的时候用到,this是当前对象的引用,super是当前对象的父类对象的引用,一般的都是把super用在构造函数中。
10.完成下面父类及子类的声明:
(1)声明Student类属性包括学号、姓名、英语成绩、数学成绩、计算机成绩和总成绩。
方法包括构造方法、get方法、set方法、toString方法、equals方法、compare方法(比较两个学生的总成绩,结果分为大于、小于、等于),sum方法(计算总成绩)和testScore方法(计算评测成绩)。
注:
评测成绩可以取三门课成绩的平均分,另外任何一门课的成绩的改变都需要对总成绩进行重新计算,因此,在每一个set方法中应调用sum方法计算总成绩。
publicclassStudent{
Stringid;
Stringname;
floatscoreOfenglish;
floatscoreOfmath;
floatscoreOfcomputer;
floatscoreOfsum;
//构造方法
publicStudent(){
}
publicStudent(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer){
this.id=aid;
this.name=aname;
this.scoreOfenglish=ascoreOfenglish;
this.scoreOfmath=ascoreOfmath;
this.scoreOfcomputer=ascoreOfcomputer;
//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;
this.scoreOfsum=sum();
}
//sum方法
publicfloatsum(){
return(this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer);
}
//testScore测评成绩/平均分
publicfloattestScore(){
return(this.scoreOfsum/3);
}
//6个get方法
publicStringgetid(){
return(id);
}
publicStringgetname(){
return(name);
}
publicfloatgetscoreOfenglish(){
return(scoreOfenglish);
}
publicfloatgetscoreOfmath(){
return(scoreOfmath);
}
publicfloatgetscoreOfcomputer(){
return(scoreOfcomputer);
}
publicfloatgetscoreOfsum(){
return(scoreOfsum);
}
//5个set方法
publicvoidsetid(Stringnewid){
this.id=newid;
}
publicvoidsetname(Stringnewname){
this.name=newname;
}
publicvoidsetscoreOfenglish(floatnewscoreOfenglish){
this.scoreOfenglish=newscoreOfenglish;
this.scoreOfsum=sum();
}
publicvoidsetscoreOfmath(floatnewscoreOfmath){
this.scoreOfmath=newscoreOfmath;
this.scoreOfsum=sum();
}
publicvoidsetscoreOfcomputer(floatnewscoreOfcomputer){
this.scoreOfcomputer=newscoreOfcomputer;
this.scoreOfsum=sum();
}
//toString方法
publicStringtoString(){
return("学号:
"+this.id+"\n姓名:
"+name+"\n英语:
"+this.scoreOfenglish+"\n数学:
"+this.scoreOfmath+"\n计算机:
"+this.scoreOfcomputer+"\n总分:
"+this.scoreOfsum);
}
//compare方法/比较2学生总分
publicvoidcompare(Studentx){
if(this.getscoreOfsum()>x.getscoreOfsum())System.out.println(this.getname()+"总分大于"+x.getname());
if(this.getscoreOfsum() elseSystem.out.println(this.getname()+"总分等于"+x.getname()); } //equals方法/比较2学生学号是否相等(还没完善) /* *publicbooleanequals(Objectx){ if(this.getClass()! =x.getClass())returnfalse; Studentb=(Student)x; if(this.id==b.getid())returntrue; } */ } (2)声明StudentXW(学习委员)类为Student类的子类。 在StudentXW类中增加责任属性,并重写testScore方法(评测成绩=三门课平均分+3) publicclassStudentXWextendsStudent{ Stringresponsibility; //构造方法 publicStudentXW(){ super(); //responsibility=""; } publicStudentXW(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){ super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer); responsibility=aresponsibility; } //testScore测评成绩/平均分 publicfloattestScore(){ return(this.scoreOfsum/3+3); } //toString方法 publicStringtoString(){ return("学号: "+this.id+"\n姓名: "+name+"\n英语: "+this.scoreOfenglish+"\n数学: "+this.scoreOfmath+"\n计算机: "+this.scoreOfcomputer+"\n总分: "+this.scoreOfsum+"\n职位: "+this.responsibility); } } (3)声明StudentBZ类为Student类的子类 在StudentBZ类中增加责任属性,并重写testScore方法(评测成绩=三门课平均分+5) publicclassStudentBZextendsStudent{ Stringresponsibility; //构造方法 publicStudentBZ(){ super(); //responsibility=""; } publicStudentBZ(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){ super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer); responsibility=aresponsibility; } //testScore测评成绩/平均分 publicfloattestScore(){ return(this.scoreOfsum/3+5); } //toString方法 publicStringtoString(){ return("学号: "+this.id+"\n姓名: "+name+"\n英语: "+this.scoreOfenglish+"\n数学: "+this.scoreOfmath+"\n计算机: "+this.scoreOfcomputer+"\n总分: "+this.scoreOfsum+"\n职位: "+this.responsibility); } } 4)声明测试类,生成若干个Student类、StudentXW类及StudentBZ类对象,并分别计算它们的评测成绩(建议采用: 写一个测试函数,该函数以父类student数组作为参数)。 importjava.text.*; publicclasstest4_10{ publicstaticvoidmain(Stringargs[]){ Studentsu=newStudent("001","苏轼",56.00f,87.00f,95.00f); Studentdu=newStudent("002","杜甫",86.00f,75.00f,80.00f); Studentbai=newStudent("003","白居易",42.00f,77.00f,65.00f); Studentliu=newStudent("004","柳宗元",67.00f,67.00f,67.00f); StudentXWou=newStudentXW("005","欧阳修",89.00f,98.00f,90.00f,"数学代表"); StudentXWwang=newStudentXW("006","王安石",98.00f,87.00f,36.00f,"英语代表"); StudentBZli=newStudentBZ("007","李白",89.00f,87.00f,87.00f,"班长"); System.out.print(li); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(li.testScore())); System.out.println(); System.out.print(wang); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(wang.testScore())); System.out.println(); System.out.print(ou); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(ou.testScore())); System.out.println(); System.out.print(su); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(su.testScore())); System.out.println(); System.out.print(du); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(du.testScore())); System.out.println(); System.out.print(bai); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(bai.testScore())); System.out.println(); System.out.print(liu); System.out.println("\n评测成绩: "+newDecimalFormat("0.00").format(liu.testScore())); } } 运行test4_10的结果如下: (很好玩吧,李白,我让你挂科。 ) 11.包有什么作用? 如何创建包和引用包中的类? 答: 包是一种松散的类的组合,一般不要求处于同一包中的类型有明确的相互关系,但由于同一包中的类在默认情况下可以相互访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。 利用包来管理类,可实现类的共享与复用。 在操作系统中,目录用来组织文件,设置权限。 只要在要用到包中类的时候,在该引用类的第一行加上: package(包的全路径)即可。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言程序设计 第四 课后 习题 答案