package com.luoliang;
public class Demo1 {
public static void main(String[] args) {
new Dervid();
}
}
package com.luoliang;
public class Dervid extends Base {
public static String fileName = "Dervid fileName 静态变量";
static{
System.out.println(fileName);
System.out.println("Dervid 静态代码块");
}
public String fileName2 = "Dervid fileName2 变量";
{
System.out.println(fileName2);
System.out.println("Dervid 代码块");
}
public static void fileMed(){
System.out.println("Dervid 静态方法");
}
int i = 22;
public Dervid() {
super();
i = 222;
System.out.println("Dervid()构造器"+i);
}
@Override
public void display() {
System.out.print(i);
System.out.println("Dervid 普通方法");
}
}
package com.luoliang;
public class Base {
private int i = 2;
public static String fileName = "Base fileName 静态变量";
static{
System.out.println(fileName);
System.out.println("Base 静态代码块");
}
public String fileName2 = "Base fileName2 变量";
{
System.out.println(fileName2);
System.out.println("Base 代码块");
}
public static void fileMed(){
System.out.println("Base 静态方法");
}
public Base(){
System.out.println("Base()+构造器"+i);
this.display();
}
public void display(){
System.out.print(i);
System.out.println("Base 普通方法");
}
}
先上结果吧:
Base fileName 静态变量
Base 静态代码块
Dervid fileName 静态变量
Dervid 静态代码块
Base fileName2 变量
Base 代码块
Base()+构造器2
0Dervid 普通方法
Dervid fileName2 变量
Dervid 代码块
Dervid()构造器222
总结下:1。父类静态变量-父类静态代码块-子类静态变量-子类静态代码块-(这时才调父类构造方法的第一句)-父类变量-父类代码块
-子类变量-子类代码块-父类构造器-子类变量-子类代码块-子类构造器
2。子类不管是否显式调用super(),都会执行父类的默认构造方法,当然你显式指定调用父类其中一个构造方法,就不会调用父类的默认构造方法了