java构造函数的继承

Java中,子类继承父类的构造函数遵循特定规则:仅继承默认构造函数;继承的父类构造函数不能作为子类的默认构造;创建子类对象时,先调用父类默认构造,再调用自己的;若父类有多个构造,子类默认调用无参构造;父类有默认构造,子类可无构造;父类无默认构造,子类需提供显示构造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java构造函数的继承需要注意一下几点:

1.子类只继承父类的默认构造函数,如果父类没有默认构造函数,那子类不能从父类那继承任何构造函数;

2.子类从父类那里继承来的默认构造函数不能成为自己的默认构造函数;

3.在创建子类对象的时候,首先调用父类的默认构造函数,其次是自己的;

4.如果父类有多个构造函数,子类默认调用父类的默认构造函数;

5.父类含有默认构造函数,子类可以没有;

6.父类没有显式的构造函数,包括默认构造函数,子类可以没有任何构造函数;

7.父类没有默认的构造函数,但有其他含有参数的构造函数,子类必需含有显示的构造函数(无论是默认无参数还是含有参数的构造函数),否则子类会报Implicit super constructor Father() is undefined for default constructor. Must define an explicit constructor

public class Father {
	
	/*public Father(){
		System.out.println("father");
	}*/
	
	public  Father(int s){
		System.out.println("Father.Father()      "+s);
	}

}
public class Child extends Father{

	public Child(){
		super(2);//显示调用父类含参的构造函数
		System.out.println("Child");
	}
	
	/*public Child(int i){
		super(i);
		System.out.println("child   "+i);
	}*/
}
public class InheritTest {


<span style="white-space:pre">	</span>public static void main(String[] args){
<span style="white-space:pre">		</span>Child child = new Child();
<span style="white-space:pre">		</span>//Child child2 = new Child(1);
<span style="white-space:pre">		</span>Father father = new Father(8);
<span style="white-space:pre">	</span>}
}
Father.Father()      2
Child
Father.Father()      8
8.如果父类含有默认构造函数,那么子类可以有构造函数,也可以不显示的调用;

<pre name="code" class="html">public class Father {
	
	public Father(){
		System.out.println("father");
	}
	
	public  Father(int s){
		System.out.println("Father.Father()      "+s);
	}

}
public class Child extends Father{
public Child(){
		//super(2);
		System.out.println("Child");
	}
}
public class InheritTest {

	public static void main(String[] args){
		Child child = new Child();
		//Child child2 = new Child(1);
		Father father = new Father();
	}
}
father
Child
father

9.如果父类有多个构造函数,子类也有多个构造函数

public class Father {
	
	public Father(){
		System.out.println("father");
	}
	
	public  Father(int s){
		System.out.println("Father      "+s);
	}

}
public class Child extends Father{

	public Child(){
		//super(2);
		System.out.println("Child");
	}
	
	public Child(int i){
		//super(i);
		System.out.println("child   "+i);
	}
}
public class InheritTest {

	public static void main(String[] args){
		Child child = new Child();
		Child child2 = new Child(1);
		//Father father = new Father();
	}
}
father
Child
father
child   1

子类如果有多个构造函数,父类要么没有构造函数,编译器自动产生默认构造函数,要么至少有一个缺省的构造函数可以让子类的构造函数调用。
10.子类如果想要调用父类的含参构造函数,则使用super

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值