词条 | 默认构造方法 |
释义 | 默认构造方法是Java语言的一种语法,是指没有参数的构造方法,可以分为2种:隐含的、程序中显式定义的。 1、默认构造方法 在java语言中,每个类至少有一个构造方法。如果程序中没有显式定义任何构造方法, 那么java语言将自动提供一个隐含的默认构造方法。只要程序中已经显式定义了构造方法。 那么java语言将不再提供隐含的默认构造方法。 //实例1 class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { System.out.println("Sub()"); } Sub(int i) { System.out.println("Sub("+i+")"); } public static void main(String[] args) { } } /*output: z.java:9: 找不到符号 符号: 构造函数 Base() 位置: 类 Base Sub() { System.out.println("Sub()"); } ^ z.java:11: 找不到符号 符号: 构造函数 Base() 位置: 类 Base { ^ 2 错误 */ 通过分析以上编译错误,原因是Base父类缺少默认构造方法,正因为Base父类定义了带参数的构造方法,以至于java语言将不再提供隐式的默认构造方法,所以代码无法通过编译。 //实例2 class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { super(8); System.out.println("Sub()"); } Sub(int i) { super(9); System.out.println("Sub("+i+")"); } public static void main(String[] args) { } } 情况变得扑朔迷离起来,虽然Base父类没有显式提供无参数的默认构造方法, 而java语言也不会提供隐式的默认构造方法,但以上代码竟然正常编译通过了。 2、构造方法的显式与隐式调用 如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用其他重载构造方法, 那么在生成子类的实例对象时,系统将默认调用父类无参数的构造方法。 看看真实的实例1代码: class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { super(); System.out.println("Sub()"); } Sub(int i) { super(); System.out.println("Sub("+i+")"); } public static void main(String[] args) { } } 原来隐式调用的super();被省略了,这下也就知道了实例2为什么得以正确编译。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。