java中: this(空/有参)和super(空/有参)的区别以及使用时的注意事项

this(空/有参)用于本类构造方法的调用,而super(空/有参)则用于在子类构造方法对父类构造方法的调用

子类的每个构造方法第一行默认都会隐式的调用super()父类无参构造函数

下面上代码来解释

1.
/**
父类


**/
class Fu
{
public Fu()
{
System.out.println("Fu 空参构造");
}


public Fu(int num)
{
System.out.println("Fu 有参构造 "+num);
}
}


/**
子类
**/


class Zi extends Fu
{
public Zi()
{

System.out.println("Zi 空参构造");
}


public Zi(int num)
{
System.out.println("Zi 有参构造 "+num);
}
}


class ExtendsDemo 
{
public static void main(String[] args) 
{
Zi zi = new Zi(1);
}
}

打印结果如下图1.png:


从而印证了在

public Zi(int num)
{
//super( );此构造的第一行隐式调用了此代码,也可以显示的调用super( )
System.out.println("Zi 有参构造 "+num);
}

当然我们也可以显示的调用我们想调用的父类的构造方法,直接在子类构造方法的第一行显示调用super(参数)即可,而此时,默认的父类无参构造super(),将不会再调用.

除非显示调用的是super( )那么父类的无参构造自然就又调用了,等同于不写的时候,隐式调用父类无参构造

---------------------------------------------------------------------------------------------------------------------------------

2.再看,如果将代码做如下修改:


/**
父类


**/
class Fu
{
public Fu()
{
System.out.println("Fu 空参构造");
}


public Fu(int num)
{
System.out.println("Fu 有参构造 "+num);
}
}


/**
子类
**/


class Zi extends Fu
{
public Zi()
{
super(1);
this(1);


System.out.println("Zi 空参构造");
}


public Zi(int num)
{

System.out.println("Zi 有参构造 "+num);
}
}


class ExtendsDemo 
{
public static void main(String[] args) 
{
Zi zi = new Zi();
}
}

在子类无参构造里又调用了super(1); 和 this(1);且都在第一行,当编译的时候报出了如下错误:如图2.png


说this()语句要放在构造函数的第一行,那么让this(1);和super(1); 互换顺序呢?编译如下图3.png


由此可得到结论,this(空/有参),super(空/有参)都必须放在构造函数的第一行,所以不可同时在构造里显示的调用两者








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值