为什么return getName();第二行和第三行才不会出现“开心工作”?return怎么理解?

为什么return getName();第二行和第三行才不会出现“开心工作”?return怎么理解?

public class Work {
	private String name;

	public Work() {
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Work(String name) {
		this.setName(name);
	}

	public String work() {
		System.out.println("开心工作");
		return getName();
	}
}
public class DevelopmentWork extends Work {
	private int TestHang;
	private int TestBug;

	public int getTestHang() {
		return TestHang;
	}

	public void setTestHang(int testHang) {
		TestHang = testHang;
	}

	public int getTestBug() {
		return TestBug;
	}

	public void setTestBug(int testBug) {
		TestBug = testBug;
	}

	public String Work() {
		System.out.println(this.getName() + "的日报是:" + "今天编写了" + this.getTestHang() + "行代码," + "目前仍有" + this.getTestBug()
				+ "个bug" + "没有解决");
		return getName();
	}

}
public class Testwork extends Work {
	private int TestNum;
	private int TestBug;

	public int getTestNum() {
		return TestNum;
	}

	public void setTestNum(int testNum) {
		TestNum = testNum;
	}

	public int getTestBug() {
		return TestBug;
	}

	public void setTestBug(int testBug) {
		TestBug = testBug;
	}

	public String Work() {
		System.out.println(
				this.getName() + "的日报是:" + "今天编写了" + this.getTestNum() + "个测试用例," + "发现了" + this.getTestBug() + "个bug");
		return getName();
	}

}
public class Test1 {
	public static void main(String[] args) {
		System.out.print("父类信息测试:");
		Work one = new Work();
		one.work();
		System.out.print("测试工作类信息测试:");
		Testwork two = new Testwork();
		two.setName("测试工作");
		two.setTestNum(10);
		two.setTestBug(5);
		two.Work();
		System.out.print("研发工作类信息测试:");
		DevelopmentWork three = new DevelopmentWork();
		three.setName("研发工作");
		three.setTestHang(1000);
		three.setTestBug(10);
		three.Work();
	}
}


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

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

2回答
好帮手慕小班 2019-05-18 10:35:17

同学你好,非常抱歉,同学贴出的代码中,老师没有注意到同学的一个错误:

1、那就是同学在父类Work中定义的是小写字母的work方法,但是在子类DevelopmentWork和Testwork中定义的是大写的Work方法,java是严格区分大小写的语言,所以父类的work与子类的Work不存在重写和重载等继承关系,Work方法是子类特有的方法!

2、当修改子类中的返回值为  return work();时, 在测试类中就调用子类的Work方法,先执行方法中的输出语句,然后再执行return 语句中的 work方法,就会先输出Work方法中的输出语句,再执行work方法中的输出语句"开心工作"!

3、当修改子类中的返回语句为 return  getName();时,在测试类中就调用子类的Work方法,先执行方法中的输出语句,然后再执行return 语句中的 getName()方法,就会先输出Work方法中的输出语句,再执行getName()方法中的输出语句,但是getName()方法中,并没有name的赋值,也就获取不到name的属性,所以getName()方法并没有添加任何输出!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕标7429059 #1
    谢谢老师~~说的很清楚了
    2019-05-18 14:32:59
好帮手慕小班 2019-05-16 17:29:04

同学你好,1、这里是问的是测试工作类和研发工作类为什么没有输出开心工作吗?   原因是:这里“开心工作”是一个输出语句在Work类中的work方法,测试工作类和研发工作类继承Work并重写了work方法,所以不会出现父类的方法中开心工作的语句!

2、return是将内容返回,是方法的返回值。例如:  public  int  sum(int a,int b){ return  a+b;}这里就是将a的值加上b的值就是方法的返回值。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 慕标7429059 #1
    return getName();第二行第三行不会出现“开心工作”,但是如果return work();就会出现 为什么return getName不会出现呢?
    2019-05-17 19:05:56
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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