JAVA中super()作用:调用父类构造方法和构造方法链
写给自己看的笔记。
写在纸上我会弄丢。
有什么错误欢迎大家提出。
public class Test extends B {
public static void main(String[] arg) {
new Test(2);// 生成一个类Test的匿名对象,调用构造函数Test(int n)
}
public Test(int n) {// 会默认在这个方法的第一行执行super(),即调用父类的无参数构造方法B()
System.out.println("Test的有参数构造函数,参数是" + n);
}
}
class B extends C {
public B() {// 会默认在这个方法的第一行执行super(),即调用父类的无参数构造方法C()
super(3);// 指定了父类构造函数super(int c),则不会再使用无参数构造函数super()
System.out.println("B的无参数构造函数");
}
}
class C {
C() {// 构造函数一般是public,public可写可不写
System.out.println("C的无参数构造函数");
}
public C(int c) {
System.out.println("这是有参数的构造函数,参数是" + c);
}
}
执行new Test(2)时,调用了B(),B()又调用了用super指定的构造方法C(int c),构成了一条构造方法链。
输出顺序:
这是有参数的构造函数,参数是3
B的无参数构造函数
Test的有参数构造函数,参数是2
ps:如果定义一个类的时候不写构造函数,会隐式生成一个的无参数构造函数,子类的构造方法中依旧会调用这个隐式构造函数
参考:《JAVA语言程序设计-基础篇》原书第8版