构造器Constructor不能被继承,因此不能被重写(Override),但是可以被重载(Overload)
如果父类自定义了有参构造函数,则子类无论定义构造函数与否,定义有参构造函数与否,都会报错,正确的做法是在子类的构造方法中添上super(参数),以表明子类构造之前先构造父类,而这句话必须放在第一句,否则报"Constructor call must be the first statement in a constructor"的错误,想想也是,如果这句话之前有了别的内容,岂不是先执行子类的构造函数了。据此引出类的加载顺序问题。
经过上网查资料,得知 首先执行 父类的静态代码块/初始化静态变量(两者优先级相同),然后执行子类的静态代码/初始化静态变量(两者优先级相同,谁写在前面谁先执行),然后初始化父类成员变量/执行代码块{}(两者优先级相同),接着父类的构造器,然后子类的成员变量/代码块,最后子类的构造器。
Java一个文件可以写多个类,只不过最多一个public类,但编译的时候有几个类就生成几个.class文件(内部类也是一样),这样验证起来方便多了。