继承和构造器之间的关系

不知道大家有没有遇到这样的问题。当两个类毫无关系时,你的构造器有参和无参都行,不会影响对方。但是当一个类和另一个类是继承关系呢?假设父类的构造器是有参的,而子类是无参的,此时就会报错,这里牵扯到super的用法。`在这里插入代码片public class TestSuper1 {
public static void main(String[] args) {
M b=new N();
}
}
class M{
private int a;

M(int a){
this .a=a;
System.out.println(“调用ma构造方法”+a);
}
void read(){
System.out.println(“看书”);
}
void f(){
System.out.println(“读书”);
}
}
class N extends M{

public N(){ //error
System.out.println(“调用了math1的构造方法”);
}
void read(){
System.out.println(“看书”);

}
}`
大家可以看到他会报错,在这里插入图片描述
那么原因是什么呢?因为父类有一个有参构造器,所以无参的就不起作用了,子类中的构造器第一句默认是super();此时super调用父类的无参构造器时,因为找不到,所以就报错了,那么怎么解决呢?两种解决办法。
第一种,在父类中再次添加一个无参构造器:在这里插入图片描述
运行结果:调用了math1的构造方法
第二种方法:
把子类构造器定为有参的,且在第一局手动加上super(a),a为你传递的参数。在这里插入图片描述
运行结果:调用ma构造方法3
调用了math1的构造方法3
总结:可以看出super(),括号里面是可以接收参数的,当父类为有参时,子类也要定义为有参的,注意super()里面的参数是和子类的构造器传的参数是一致的。其实这里也运用了父类引用指向子类对象,所以当父类是有参构造器时,子类必须也定义为有参的,不然参数传不进去。不过也可以这样:子类也定义为无参的,super里面随便传一个值,这样也是正确的。在这里插入图片描述
运行结果:调用ma构造方法5
5
调用了math1的构造方法5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值