您的位置:首页 > 其它

构造方法 static 块 {}块 执行顺序

2016-04-18 16:44 148 查看
package com.test.innerclass;

public class HelloB extends HelloA {
public HelloB() {
System.out.println("子类无参构造方法 HelloB()");
}

public HelloB(String arg) {
System.out.println("子类有参构造方法 HelloB(arg)");
}

{
System.out.println("子类构造块I'm B class");
}

static {
System.out.println("子类静态块static B");
}

public static void main(String[] args) {
System.out.println("-----------main方法----------");
System.out.println("-----------无参数构造一个子类的情况-----");
new HelloB();
System.out.println("-----------有参数构造一个子类的情况-----");
new HelloB("arg");
}
}

class HelloA {
static {
System.out.println("父类静态块 static A");
}
{
System.out.println("父类构造块 I'm A class");
}

public HelloA() {
System.out.println("父类无参构造方法HelloA()");
}

public HelloA(String arg) {
System.out.println("父类有参构造方法HelloA(arg)");
}
}

output:

父类静态块 static A
子类静态块static B
-----------main方法----------
-----------无参数构造一个子类的情况-----
父类构造块 I'm A class
父类无参构造方法HelloA()
子类构造块I'm B class
子类无参构造方法 HelloB()
-----------有参数构造一个子类的情况-----
父类构造块 I'm A class
父类无参构造方法HelloA()
子类构造块I'm B class
子类有参构造方法 HelloB(arg)

----------------------------------------------------

2016-05-04

如果父类定义了有参构造方法,则默认不显示而实际存在的无参构造方法将会消失。

此时子类在构造函数里如果没有显示调用父类的构造方法(如super(name)) 则默认一定会调用父类的无参构造方法,如此,如果父类没有无参构造方法,就会无法编译。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: