从一个小例题学习super()函数的特点

题目如下:写出程序运行结果

class Super
{
	int i=0;
	public Super(String a)
	{
		System.out.println("A");
		i=1;
	}
	public Super()
	{
		System.out.println("B");
		i+=2;
	}
}

class  Demo extends Super
{
	public Demo(String a)
	{
		System.out.println("C");
		i+=5;
	}
	public static void main(String[] args) 
	{
		int i=4;
		Super d=new Demo("A");
		System.out.println(d.i);
	}
}

运行结果:B C 7

解析:Super d=new Demo("A");时,会调用demo的有参构造函数,而构造函数第一行有个super()【隐式的,下面会解释】,于是就到父类中,此时i为0,执行父类的无参构造函数

public Super()
{
System.out.println("B");
i+=2;
}
,此时打印B且i为2;执行完之后再回到demo的构造函数

public Demo(String a)
{
System.out.println("C");
i+=5;
}
继续执行,打印C此时i为7.

那么为什么在demo构造函数第一行会有隐式的super函数呢?

是这样的,1.当父类中有个空参数的构造函数时候,子类所有的构成函数里第一行默认都有一句supr():调用父类的空参数构成函数;所以子类初始化时候,要先访问下父类构造函数,如果要访问父类指定的构造函数,可以手动定义super语句,子类中至少有个构造函数会访问父类构造函数;

2.当父类中没空参数的构造函数时候,而是有参数的父类构造函数。这时super()不能隐式。则必须自己在子类的构成函数里第一行默认添加super(参数)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值