java构造器中的super和this

Java中,super用于调用父类构造器,this用于调用本类的其他构造器。当父类有定义构造器后,会隐藏默认无参构造器。子类构造器默认会调用父类的无参构造器,如果没有显式调用super,则编译会报错。在构造器中,super和this调用都需放在首行,因此不能同时调用。
摘要由CSDN通过智能技术生成

java中的构造器中super是用来对于父类中的构造器进行调用的,this是对于本类中的其他构造器进行调用,或者调用对应的元素,this调用其他构造器需要放在构造器的第一行,super也需要放在第一行,这也造成super不能和this一起调用构造器

package test;

public class aaa {
    public static void main(String[] args) {

    }
}

class bb{
    private int l;
    private int age;
    private String s;

    public bb(int l, int age) {
        this.l = l;
        this.age = age;
    }

    public bb(int l,String s) {
        this(s);
        this.l = l;
    }

    public bb(String s) {
        this.s = s;
    }
}

在父类中定义构造器之后,父类中的默认无参构造器将不能使用,此时下图中的cc类中如果将构造器中的super和对应的参数删除,也会报错


public class aaa {
    public static void main(String[] args) {
        
    }
}
class bb{
    private int l;
    private int age;

    public bb(int l, int age) {
        this.l = l;
        this.age = age;
    }
    
}

class cc extends bb{
    private int high;

    public cc(int l, int age, int high) {
        super(l, age);
        this.high = high;
    }
}

在java中,子类的构造器是默认带有一个super()的,所有才会有前面的报错

package test;

public class aaa {
    public static void main(String[] args) {
        new cc(1);
    }
}
class bb{
    private String s;

    public bb() {
        System.out.println("无参构造器被调用");
    }
}

class cc extends bb{
    private int high;
    public cc(int high) {
        this.high = high;
    }


}

输出结果

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值