Java中父类对子类构造方法的影响

父类中的默认构造方法

如果父类拥有无参构造方法(无论隐式的还是显式的)且子类中的构造方法又没有明确指定调用父类的哪个构造方法,则子类中没有调用该子类其它构造方法的构造方法使用super()隐式调用父类的无参构造方法,如下代码:

package suris;
public class Father {
	public Father() {//默认构造方法
	super();//隐藏在Source中
	 System.out.println("父类方法");
	 }	
	public Father(double weight) {
	}
	public Father(String name) {
	}	 
}	

子类调用父类的构造方法

package suris;
public class Son  extends Father {
public Son() {
super();//调用了父类中的默认构造方法
}

super调用父类构造方法,该行代码必须放在有效代码行的第一行

在这里插入图片描述

package suris;
public class Son1 extends Father {
	 public Son1(){
	  super();
	   System.out.println("子类方法");
	   }
}	   

体现出super()调用方法应该在代码块有效代码的第一行

如果一个构造方法没有调用本类中的其它构造方法,构造方法默认有一个super();

package suris;
public class Son1 extends Father {
	 public Son1(){
  	// super();
	  System.out.println("子类方法");
 	 }
	  public static void main(String[] args) {
 	 }
}  

反之没有super(),但是如果被调用的构造方法没有调用本类其它构造方法,则该构造方法由super()

package suris;
public class Son  extends Father {
	public Son() {
	this(12);//调用了本类的其他方法,*所以该方法的代码块中没有调用父类的默认方法(super())*
	}
	public Son(int i) {
	//super();*如果没有父类的Object方法,就会报错,因为没有调用父类的默认构造方法*	
	}
	public static void main(String[]args) {
	new Son();
	}
}	

总结:1、子类中该构造函数没有使用this();调用本类中其它构造函数,所有该函数中使用隐含的super()调用父类无参构造函数。
2、子类中该构造函数使用this()调用本类无参构造函数,则该构造函数中不存在super()调用父类无参构造函数的情况,这一点可以通过分析运行程序后的结果看出来
3、如果父类没有无参构造方法(无论隐式的还是显式的),则要求子类构造方法必须直接或间接指定
子类必须调用父类的构造方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值