// 注意,这里不能是 public class OOO,否则编译无法通过,需把文件命名成 OOO.java class OOO { // 注意:如果不定义OOO(),那么Shapes(int i)编译出错 OOO() { System.out.println(" Construtor() in OOO"); } OOO(int i) { // this(); // 可以这样调用! System.out.println(" Construtor(i) in OOO"); } } public class Shapes extends OOO{ Shapes() { super(200); // 必须放在第一行,否则出错。 // 调用super(200)以后,不再默认调用super()了,否则会自动调用super() // 原因:构造函数通常用于完成一些初始化的工作,比方说类B继承了类A,类A中有一个name属性,在类A的构造函数中name 被初始化,如果在类B构造函数中我们没有先调用父类A的构造函数而先使用了未初始化的资源name,将不能得到我们期望的结果,所以人们就会有了这种约定。 System.out.println(" Construtor() in Shapes"); } Shapes(int i) { // 还是会默认调用super() System.out.println(" Construtor(int) in Shapes"); } public static void main(String[] args) { // 例子1: System.out.println("==================ex1=================="); Shapes s1 = new Shapes(); // 例子2: System.out.println("==================ex2=================="); Shapes s2 = new Shapes(100); } }
另外有一篇:java构造函数的执行顺序
http://www.blogjava.net/rocket/archive/2008/05/27/203165.html
若创建一个没有构造函数的类,则编译程序会帮我们自动创建一个默认构造函数。
如果已经定义了一个构造函数(无论是否有自变量),编译程序都不会帮我们自动合成一个:
class Bush {
Bush(int i) {}
Bush(double d) {}
}
现在,假若使用下述代码:
new Bush();
编译程序就会报告自己找不到一个相符的构造函数。