关于子类继承父类构造器 super问题

当子类想继承父类时,父类必须有无参的构造方法,如果不主动添加系统会默认添加一个无参的构造方法,此时子类可以顺利继承父类
但是当父类添加了一个带参的构造方法时,此时系统将不会再默认添加无参的构造方法,所以此时必须自己手动添加一个无参的构造方法,这样才能保证被子类顺利的继承

在实例化子类的时候会自动的实例化父类,如果此时的父类还继承了其他的类,那么便会逐级的向上查询,知道找到顶级的父类,然后开始逐个的实例化,在实例化的同时

便会自动调用无参的构造方法,但是如果想要调用父类的带参的构造方法,此时就必须通过super(i)进行调用

public class Father {
	 //年龄  
    private int age;  
    //仅有一个带参数的构造方法  
    public Father (int i){  
    	this.age = i;  
    	System.out.println("实例化父类 ag = " + age);  
    }  
    public Father() {
    	System.out.println("这是父类的无参的构造方法");  
    	// TODO Auto-generated constructor stub
    }
    //main方法  
    public static void main (String []  args) {  
    	//实例化对象时必须指定参数以运行对应的构造方法实例(构造)对象  
    	Father fa = new Father(40);  
    	Father fa1 = new Father(50); 
    	Father fa2 =new Father();
    }  
}
 
 
实例化父类 ag = 40
实例化父类 ag = 50
这是父类的无参的构造方法

public class Son extends Father{  
	private int age;  
	//子类构造方法——必须先显式调用父类构造方法  
	public Son(int i) {  
		super(i);//必须先调用父类的构造方法,然后才能写子类构造方法的其他逻辑    可以注释掉这句看运行结果
	    this.age = i - 20;  
		System.out.println("实例化子类 age = " + age);  
	}  
	public Son() {
		super();   //可以注释掉这句然后看运行结果
		System.out.println("这是子类的无参构造方法");
	}
	//main方法  
	public static void main (String [] args) {  
		//实例化子类Son  
		Son so = new Son(40);  
		Son so1 = new Son(50);
		Son so2 =new Son();
	}  
} 
 
 
实例化父类 ag = 40
实例化子类 age = 20
实例化父类 ag = 50
实例化子类 age = 30
这是父类的无参的构造方法

转载自https://blog.csdn.net/lzh_86/article/details/78187379

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值