老师 父类有带参构造函数 子类构造函数应该怎么写?为什么?

老师 父类有带参构造函数 子类构造函数应该怎么写?为什么?

//父类

public abstract class Animal {

private String name;


public Animal(String name) {

super();

this.name = name;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}

public abstract void play();

}

//子类

public class Dog extends Animal {

//子类带参构造函数是这么写么?为什么这么写 

public Dog(String name) {

super(name);

}


@Override

public void play() {

System.out.println(this.getName()+"在做游戏!");

}


}


正在回答

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

1回答

子类构造方法中写super(); 会调用父类的无参构造方法。

子类构造方法中写super(参数列表); 会调用父类相应的有参构造方法。

在你的代码中,父类没有无参构造,所以子类构造方法中不能写super(); 写super(name); 相当于调用父类的构造方法,并把此name传值给父类构造方法的name,父类在构造方法中对name属性进行赋值。

  • 平安快乐 提问者 #1
    那父类对其name赋值 子类的name值 为什么变了
    2020-04-29 18:28:19
  • 慕容2892559 回复 提问者 平安快乐 #2
    因为子类也有属性name啊,相当于this.name=name; this.name的this就是子类对象,后面的name是传的参数。
    2020-04-29 18:49:13
  • 好帮手慕阿慧 回复 提问者 平安快乐 #3
    同学你好,子类继承了父类,所以父类中的属性和方法子类也是拥有的,所以子类中this.getUserName()同父类的getUserName()结果一样。 另一个同学回答的正确,同学可以参考。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-04-29 19:11:04
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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