欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习 继承之子类父类的构造函数

程序员文章站 2022-05-07 21:53:57
...
class A
{
	int num = 2;
	A()
	{
		
		System.out.println("父类");
	}
	
}
class B extends A
{
	int num = 3;
	B()
	{
		                                //子类构造函数这里默认有条隐式语句 super()
		System.out.println("子类");
	}
	
}
public class Test
{
	public static void main(String[] args)
	{
		B b = new B();
		
	}
}

Java学习 继承之子类父类的构造函数

父类构造函数和子类构造函数都运行了,而且父类构造函数先于子类构造函数运行

因为子类构造函数在首个语句应该是一条隐式语句 super() 来调用父类构造函数

可以验证:

Java学习 继承之子类父类的构造函数

因为父类中只有一个带参数的构造函数,并没有无参构造函数,所以子类构造函数调用时发现没有父类无参构造函数,所以报错。

但我们可以在子类构造函数首句中显示的调用父类构造函数

Java学习 继承之子类父类的构造函数

这样就不会报错。

另外注意,如果子类与父类都有一个无参构造函数和一个有参构造函数,子类有参函数默认调用的父类构造函数还是无参的父类构造函数。

如下面例子所示:

class A
{
	int num = 2;
	A()
	{
		System.out.println("父类无参");
	}
	A(int num)
	{
		
		System.out.println("父类有参");
	}
	
}
class B extends A
{
	int num = 3;
	B()
	{
		
		
		System.out.println("子类无参");
	}
	B(int num)
	{
		System.out.println("子类有参");
	}
	
}
public class Test
{
	public static void main(String[] args)
	{
		B b = new B(3);
		
	}
}

Java学习 继承之子类父类的构造函数