【Java】子类的构造函数什么时候需要加 super();

首先,明确一点,super(); 不是必须的。那么,什么时候需要在子类的构造函数上添加 super(); 呢?

1.当父类存在无参数构造函数时,JVM (我安装的是JDK1.8) 会在子类的构造函数中自动添加隐式的 super();,在注释的位置。因此,无需手动添加 super();

class Super{
	Super(){
		System.out.println("Super");
	}
}

class Demo extends Super{
	Demo(){
		//super();
		System.out.println("Demo--");
	}

	Demo(String msg){
		//super();
		System.out.println("Demo--" + msg);
	}
	
 	public static void main(String[] args) {
 		new Demo();
        new Demo("test");
    }
}

//返回结果:
//Super
//Demo--
//Super
//Demo--test

2.当父类中只存在有参数构造函数,必须在子类的构造函数中添加 super(参数列表);,且 super() 的参数列表必须与父类构造函数的参数列表相同。
当然,构造函数的参数列表可以任意,不过如果其不包含super()所需的全部参数,必须在子类中初始化成员变量。格式为 static 变量类型 变量名 = 常量;

class Super {
    Super(String msg) {
        System.out.println("Super--" + msg);
    }
}

class Demo extends Super {
    Demo(String msg) {
        super(msg);
        System.out.println("Demo--" + msg);
    }

    static String msg = "test2";

    Demo(int x) {
        super(msg);
        System.out.println("Demo--" + x);
    }

    public static void main(String[] args) {
        new Demo("test1");
        new Demo(0);
    }
}

//返回结果:
//Super--test1
//Demo--test1
//Super--test1
//Demo--0

总结: 实质上,添加 super(); 的目的是为了确保构造子类前,能成功地构造父类。也就是说,既然子类继承了父类的,只有当父类确实存在,子类才能够存在。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值