关于重写方法的问题

关于重写方法的问题

public class Work {

//此类为工作类(父类),用于存放共有属性(工作名称)和共有方法(工作内容描述)

//共有属性

private String workname;

//无参构造

public void Work() {

}

//全参构造用于传参

public void Work(String workname) {

this.workname=workname;

}

//get/set方法

public void setWorkname(String workname) {

this.workname=workname;

}

public String getWorkname() {

return this.workname;

}

//共有的工作描述方法

public void say() {

System.out.println("父类信息测试:开心工作!");

}

    //测试类的工作描述

public void testsay(int exnum,int bugnum) {

System.out.println(this.workname+"的日报是:几天编写了"+exnum+"个测试用例,发现了"+bugnum+"个bug");

}

public void buildsay(int exnum,int bugnum) {

System.out.println(this.workname+"的日报是:几天编写了"+exnum+"行代码,目前仍然有"+bugnum+"个bug没有解决");

}

}

相关代码:

public class TestWork extends Work {
//此类为测试工作类(工作类的子类A,继承工作类(Work))
//建立测试工作类的特有属性
private int exnum;//测试用例个数

private int bugnum;//发现的bug数量

//get、set方法
public int getExnum() {
return exnum;
}

public void setExnum(int exnum) {
this.exnum = exnum;
}

public int getBugnum() {
return bugnum;
}

public void setBugnum(int bugnum) {
this.bugnum = bugnum;
}
//重写父类中测试工作类描述的方法
public void testsay() {
System.out.println(this.getWorkname()+"的日报是:几天编写了"+this.exnum+"个测试用例,发现了"+this.bugnum+"个bug");
}


}

相关代码:

package com.lin.work;

public class BuildWork extends Work{
//此类为工作类(Work)的子类--研发工作类
//研发类的属性
private int codenum;//代码行数
private int bugnum;//bug数量

public int getCodenum() {
return codenum;
}

public void setCodenum(int codenum) {
this.codenum = codenum;
}

public int getBugnum() {
return bugnum;
}

public void setBugnum(int bugnum) {
this.bugnum = bugnum;
}
//重写的父类中的方法
public void buildsay() {
System.out.println(this.getWorkname()+"的日报是:几天编写了"+this.codenum+"行代码,目前仍然有"+this.bugnum+"个bug没有解决");
}
}

相关代码:

​问题描述:老师您好!以上为我的代码,在代码编写中我遇到问题如下:
1.我理解的继承是子类对象使用父类中的属性和方法,但是编程练习中的思路分析中,没有说要在父类中编写两个工作日志描述的编写,而是在定义工作类和研发类之后,进行继承,继承后,再重写运行方法,进行日报描述,那为什么需要重写呢,我有点不明白练习中重写的目的是什么。
2.在我的代码中我也分别在两个子类中进行了方法重写(父类是带参数的,重写后的是无返回值的),但是我在测试代码中无法使用重写的代码,只能使用父类中的带参数的方法,请问这是什么原因呢?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2021-07-07 16:12:11

同学你好,针对同学的问题做出如下解答:
1、一般我们将子类共有的特点定义在父类中,但每个子类的的特点又有所不同,所以在父类中定义后,每个子类根据自己特有的特点对父类中定义的方法进行重写。如:

    1)测试工作、研发工作都具有工作描述的特点,所以将工作描述的方法定义在父类中。

    2)但测试工作、研发工作的工作描述又各不相同,所以需要在子类中对工作描述的方法进行重写,用于覆盖父类中的工作描述方法。

    3)重写方法后,当子类对象调用工作描述的方法时,则不再是访问父类中的工作描述方法,而是调用子类重写后的工作描述方法。

2、方法重写要求方法名相同、参数列表也相同,同学代码中方法不构成重写,而是子类中的testsay()与父类中的testsay(int exnum, int bugnum)构成方法的重载。

    在子类中可以直接调用不带参的testsay(),也可直接调用带参的testsay(int exnum, int bugnum),不知同学调用的是哪个方法得到的结果与预期效果不一样呢?可参照老师下方对代码的修改建议,修改后再测试运行。


代码的修改建议如下:

1、父类work

    1)构造方法需要与类同名且无返回值类型,无参与有参构造方法代码修改如下:

    http://img1.sycdn.imooc.com//climg/60e55b470962c35b04170169.jpg

    2)无需定义testSay与buildeSay方法,定义一个say()方法用于表示工作表述即可。

    http://img1.sycdn.imooc.com//climg/60e55931097e920c07020269.jpg

2、测试工作类

    1)添加无参与全参构造方法,便于在测试类中创建测试工作类的对象

    http://img1.sycdn.imooc.com//climg/60e55c1409822fe306940178.jpg

    2)重写父类say方法

    http://img1.sycdn.imooc.com//climg/60e55a05094eb94910480223.jpg

3、研发工作类

    1)添加无参和有参构造方法,便于测试类创建该类的对象

    http://img1.sycdn.imooc.com//climg/60e55c94090366e107400170.jpg

    2)重写父类say()方法

    http://img1.sycdn.imooc.com//climg/60e559a309b161cb09600247.jpg

3、测试代码及运行结果

    http://img1.sycdn.imooc.com//climg/60e55d790942bcf412620502.jpg

4、其他

    关于方法的命名问题,如果由一个单词组成,则该单词小写。如果由多个单词组成,则第一个单词小写,从第二个单词开始每个单词的首字母大写。例如testsay应改为testSay。

祝学习愉快~

  • 提问者 赵林0225 #1

    非常感谢您的解答!

    2021-07-07 20:32:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师