super调用属性的问题

super调用属性的问题

使用super关键字对父类属性赋值时,需要添加父类的无参构造方法,那么使用super调用父类属性的时候,需要添加无参构造方法吗?

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

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

2回答
好帮手慕小班 2019-10-30 17:50:49

同学你好,1、在一个java类中如果没有写构造方法,JVM(Java虚拟机)会默认添加一个无参构造方法。

    2、Java的规定:子类继承父类,子类的构造方法必须调用super(),即父类的构造方法,而且必须放在构造方法的第一行。

    3、在子类Son中,如果没有添加构造方法,JVM(Java虚拟机)会默认添加一个无参构造方法,在这个默认添加的构造方法中,会在第一行有一句super();     来调用父类的无参构造。

   所以此时,在Son类中的无参构造会默认调用父类中的无参构造的方法,而父类中如果没有,就会报错了。建议在所有类中添加无参构造,这是一个好的编码习惯。

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

好帮手慕小班 2019-10-30 16:54:33

同学你好,1、使用super调用父类属性,与添加父类无参构造方法并没有直接的关系呐。

    2、在一个java类中如果没有写构造方法,JVM(Java虚拟机)会默认添加一个无参构造方法,但是当写了有参构造后,JVM(Java虚拟机)不会再默认添加一个,如果只写了一个带参构造,假如有一个子类继承了它,一般子类的无参构造默认去调用的是父类的无参构造(而此时父类并没有无参构造),这个时候就会报错了。例如:

父类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Father {
    private String name;
        //看是否有无参构造对子类的影响
    public Father() {    
    }
    public Father(String name) {
        super();
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
     
}

子类:

1
2
3
4
5
public class Son extends Father{
    public void play(){
        String n=super.name;//直接调用父类中的属性
    }
}

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

  • 提问者 一只大猪蹄 #1
    为什么使用子类使用super关键字对父类赋值,需要添加父类的无参构造方法呢?
    2019-10-30 17:02:48
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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