class E{
int x = dd();
int y = cc();
public int dd(){
System.out.println("父类普通方法");
return 1;
}
public static int cc(){
System.out.println("父类static方法");
return 2;
}
}
public class D extends E{
int x = dd();
int y = cc();
public D(){
System.out.println("要");
}
public int dd(){
System.out.println("子类普通方法");
return 1;
}
public static int cc(){
System.out.println("子类static方法");
return 2;
}
public static void main(String[] args){
new D();
}
}
结果:
子类普通方法
父类static方法
EEEEEEE
子类普通方法
子类static方法
要
求解,为什么是这样的顺序,结果是我编译运行的结果
执行顺序:
1、首先是main方法里的new D();
这里要调用父类构造方法,先初始化变量,所以执行:int x = dd();(父类),因为子类覆盖了父类的这个方法,所以执行子类的dd();方法,输出:子类普通方法
2、父类继续执行int y = cc();这个方法是static的,所以,不能被覆盖,输出:父类static方法
3、父类构造方法执行结束,执行子类构造方法,先进行变量初始华,执行子类的int x = dd();(子类),调用方法,输出子类普通方法
4、再执行int y = cc();(子类),输出子类static方法
5、最后,执行System.out.println("要");
这就是整个过程,其实syoumei(只答有趣的题,只解答不甚懂的题)说的很清楚了
执行构造方法会调用父类构造方法。
执行构造方法前先初始成员
方法的覆盖
static方法不会被覆盖