兄弟,我查了好久,这个程序的执行顺序是:建立子类sub的对象,接着调用父类的构造方法Super,Super中调用test方法,此时test方法调用的是子类的test方法,而不是Super类的,原因是建立的是子类的对象,这一点类似于Super s= new Sub(); s.test调用的就是子类的test方法;说完原因,这个是时候由于子类的构造方法还没有执行,所以成员变量a还是默认值,int类型的默认值也就是0;此时父类的构造方法执行完毕,接下来执行子类的构造方法(子类的构造方法是系统默认的无参数的构造方法),这时候a的值才为6,所以,最后程序的输出是0。你可以建一个Sub引用去接收这个子类对象,然后打印出a,就会输出6;建一个Super引用去接收这个对象,打印a就可以输出5.