先上代码
- class Fu
- {
- static
- {
- System.out.println("Fu class in~");
- }
- {
- System.out.println("Fu 构造代码块 run~");
- }
- Fu()
- {
- System.out.println("Fu 构造函数 run~");
- }
- }
- class Zi extends Fu
- {
- static
- {
- System.out.println("Zi class in~");
- }
- {
- System.out.println("Zi 构造代码块 run~");
- }
- Zi()
- {
- System.out.println("Zi 构造函数 run~");
- }
- }
- class ExtendsDemo
- {
- public static void main (String [] args)
- {
- new Zi();
- }
- }
复制代码
在子类对象进行初始化时,父类的构造函数也会运行 那是因为子类构造函数默认第一行有一条隐式语句 super(); 它会访问父类中空参数的构造函数,而且子类中所有构造函数第一行默认都是super(); 为什么子类一定要访问父类中的构造函数? 因为父类中的数据子类可以直接获取,所以子类在建立对象时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象进行初始化时,需要先访问一下父类中的构造函数。 如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。 注意:super(); 语句一定定义在子类构造函数的第一行。 因为this() 语句也只能放在构造函数的第一行,所以这两个语句只能有一个。 子类的所有构造函数,默认都会访问父类中空参数的构造函数,因为每一个子类的构造函数内的第一行都有一个隐式的super(); 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式指定要访问的父类中的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。 子类中至少有一个构造函数会访问父类中的构造函数。 父类中的构造函数第一行也有一个隐式的super(); java中有一个类是所有类的父类------object类
|