以下程序的输出结果为
class Base{ public Base(String s){ System.out.print("B"); } } public class Derived extends Base{ public Derived (String s) { System.out.print("D"); } public static void main(String[] args){ new Derived("C"); } }
1.写一个类,如果没有写构造函数,那么这类默认会有一个无参的构造函数。如果写构造函数了,那么就不会有默认的无参构造函数, 以自己写的构造函数为准。 2.子类在写构造函数的时候,第一行必须用super 关键字调用父类的任一构造函数。 3.用super调用父类的构造函数时,如果调用的是父类无参构造函数,则super()可以不用写,如果是有参构造函数,则必须显示调用。 所以看这道题: 1.父类 Base 有一个有参构造函数,那么默认的无参构造函数就没有了; 2.在子类Derived的构造函数中,必须通过super调用父类的构造函数 3.父类Base 没有无参的构造函数,所以必须显示调用父类的有参构造函数,即显示的调用 super("");
子类中没有用super关键字去调用父类的构造方法,那我们现在就去看父类中是否有无参构造方法,显然此时的父类中定义了一个有参构造方法,却未定义无参构造方法,因此就会编译出错。