创建子类对象,先走父类,再走子类,子类覆盖父类方法。所以第一步创建子类对象运行public Demo(String a) ;并没有输出,在输出之前调用父类的空构造函数 public Super(),也就是说子类没有声明调用父类带参的构造函数都默认调用父类的空构造函数,所以会打印输出父类中的B,然后在执行子类中的打印输出语句输出C,在给变量i进行赋值i=5,最后执行主函数main中的输出语句输出5.所以程序输出打印:BC5
public Demo(String a)
{
//这里有super() 会把父类的无参构造函数加载进来,自然先打印出来 B
//同时i的值变为2
System.out.println("C");
i=5; //这里其实是super.i = 5也就是把父类i的值赋值为5,因为多态的特性,成员变量看左边,她就是父类
}