下面的代码在访问子类构造函数时,父类也运行了。
class Fu{
Fu()
{
System.out.println("Fateher");
}
}
class Zi extends Fu{
Zi()
{
System.out.println("baby");
}
}
class ExtendsDemo{
public static void main(String[] args)
{
new Zi();//匿名对象
}
}
子类的实例化过程:子类中所有的构造函数默认都会访问父类中空参数的构造函数。
因为:在子类的构造函数中第一行有一个默认的隐式语句:super()
需要注意的是:
- 当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。
- super和this只能存在一个。并且super和this都只能定义在第一行。
- 子类构造函数如果使用this调用了本类构造函数时,那么super就没有了,但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。
class Fu{
Fu(int x)
{
System.out.println("父亲");
}
}
class Zi extends Fu
{
Zi()
{
super(6);//访问了父亲
System.out.println("boy");
}
Zi(int x)
{
this();//使用this调用本类构造函数
//super消失
System.out.println("girl");
}
}
class ExtendsDemo{
public static void main(String[] args)
{
new Zi(6);
}
}
输出结果: