关于在子类编写构造方法,并调用父类相关赋值方法,完成属性赋值的问题

关于在子类编写构造方法,并调用父类相关赋值方法,完成属性赋值的问题

//测试类:
public class Test {
    public static void main(String[] args) {
		System.out.print("父类信息测试:");
		Work one=new Work();
		System.out.println(one.work());
		System.out.print("测试工作类信息测试:");
		TestWork two=new TestWork("测试工作",10,5);
	    System.out.println(two.work());
		System.out.print("研发工作类信息测试:");
		DevelopmentWork three=new DevelopmentWork("研发工作",1000,10);
		System.out.println(three.work());
	}
}

//父类Work
public class Work {
    // 属性:工作ming
    private String name ;
	// 无参构造方法
	public Work(){ 
	}
	// 带参构造方法,完成工作类型的赋值
	public Work(String name){
	    this.setName(name);
	}
   // 公有的get***/set***方法完成属性封装
   public void setName(String name){
       this.name=name;
   }
   public String getName(){
       return this.name;
   }
	// 方法:工作描述,描述内容为:开心工作
	public String work(){
	    String str1="开心工作";
	    return str1;
	}
}


//子类TestWork
public class TestWork extends Work {
    //属性:编写的测试用例个数、发现的Bug数量
    private int caseNumber;//测试用例个数
    private int bugNumber;//发现的Bug数量
    // 编写构造方法,并调用父类相关赋值方法,完成属性赋值
	public TestWork(String name,int caseNumber,int bugNumber){
	    super.setName(name);//此处应该用super.setName(name)还是应该用this.setName(name)?????,直接用super(name)可以吗?
	    this.setCaseNumber(caseNumber);
	    this.setBugNumber(bugNumber);
	}
    // 公有的get***/set***方法完成属性封装
    public void setCaseNumber(int caseNumber){
       this.caseNumber=caseNumber;
   }
   public int getCaseNumber(){
       return this.caseNumber;
   }
   public void setBugNumber(int bugNumber){
       this.bugNumber=bugNumber;
   }
   public int getBugNumber(){
       return bugNumber;
   }

	// 重写运行方法,描述内容为:**的日报是:今天编写了**个测试用例,发现了**bug。其中**的数据由属性提供
	public String work() {
	    String str2=this.getName()+"的日报是:"+"今天编写了"+this.getCaseNumber()+"个测试用例,"+"发现了"+this.getBugNumber()+"个bug";
	    return str2;
	}
}


//子类
public class DevelopmentWork extends Work {
    // 属性:有效编码行数、目前没有解决的Bug个数
	private int codeNumber;//编码行数
	private int unsBugNumber;//未解决的Bug个数
	
	//编写构造方法,并调用父类相关赋值方法,完成属性赋值
	public DevelopmentWork(String name,int codeNumber,int unsBugNumber){
	   // this.setName(name);
	   super(name);
	   this.setCodeNumber(codeNumber);
	   this.setUnsBugNumber(unsBugNumber);
	}
	
    // 公有的get***/set***方法完成属性封装
    public void setCodeNumber(int codeNumber){
       this.codeNumber=codeNumber;
   }
   public int getCodeNumber(){
       return this.codeNumber;
   }
   public void setUnsBugNumber(int unsBugNumber){
       this.unsBugNumber=unsBugNumber;
   }
   public int getUnsBugNumber(){
       return this.unsBugNumber;
   }
	
	// 重写运行方法,描述内容为:**的日报是:今天编写了**行代码,目前仍然有**个bug没有解决。其中**的数据由属性提供
	public String work() {
	    String str3=this.getName()+"的日报是:"+"今天便编写了"+this.getCodeNumber()+"行代码,"+"目前仍然有"+this.getUnsBugNumber()+"个bug没有解决";
	    return str3;
	}
}

我的问题:在父类Work类中,带参构造方法只有(String work)一个参数;在子类TestWork中,编写构造方法,并调用父类相关赋值方法,完成属性赋值应该如何操作?
是必须在子类的构造方法中把父类构造方法中的参数全部添加后,再加入子类特有属性的参数,然后进行赋值,应该用super.setName(name)还是应该用this.setName(name)?????,直接用super(name)可以吗?
还是在子类的构造方法中只写子类特有属性对应的参数,然后调用父类的相关方法再进行参数的相关赋值?   
在创建子类的构造方法时,如何调用父类的构造方法,并完成属性赋值???求老师解答。
在创建子类的构造方法时,如何调用父类的构造方法,并完成属性赋值???求老师解答。
在创建子类的构造方法时,如何调用父类的构造方法,并完成属性赋值???求老师解答。

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

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

1回答
吃吃吃鱼的猫 2019-03-25 14:37:41

同学你好,第一,在JAVA类中使用super来引用父类的成分,用this来引用当前对象。调用父类的方法时应该使用super关键字。第二,super.setName(name)方法是调用Work类的setName(name)方法为属性赋值,调用父类构造方法完成赋值的方法应该是super(name);调用构造方法时可以省略方法名。第三,当在子类的构造方法中只写子类特有属性对应的参数的话,直接调用this(name)即可,这时会直接覆盖父类方法,不用再对父类构造方法进行任何操作。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 慕用6373601 #1
    但是此处如果用this.setName(name)来为属性赋值时,程序也可以正常运行,没有报错,是为什么?
    2019-03-25 14:57:47
  • 吃吃吃鱼的猫 回复 提问者 慕用6373601 #2
    因为this.setName(name)方法也为属性进行赋值操作(this.name=name),同在构造方法中为属性赋值含义一样。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-03-25 15:45:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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