Java构造方法详述

1 作用和特点

1.1 作用

给对象中的成员进行初始化。

1.2 特点

  1. 方法名与类名相同;
  2. 没有返回值类型,连void都没有;

2 注意事项

  1. 如果没有给出构造方法,系统将自动提供一个无参构造方法;
  2. 如果给出了构造方法,系统将不再提供默认的无参构造方法,这时如果还想使用无参构造方法,就必须自己给出,建议永远给出无参构造方法;
  3. 因为当父类存在有参构造时,子类构造不会自动调用父类有参构造,仍然默认调用super()即父类无参构造,如果父类没有自己给出无参构造,就会报错;

3 加载机制

  1. 当通过子类的构造方法来实例化一个子类时,该构造方法会首先调用直接父类的构造方法,而父类的构造方法也会调用其直接父类的构造方法;
  2. 这个过程不断重复,直到到达了java.lang.Object类的构造方法,即子类的所有父类也会被实例化;

4 案例

4.1 隐式/显式调用父类无参构造

public class Base {
	public Base(){
		System.out.println("Base 的无参数的构造函数被调用");
	}
	public Base(String str){
		System.out.println("Base 的带一个参数的构造函数被调用"+"--"+str);
	}
}

public class Sub extends Base{
	
	public Sub(){
		// super();
		System.out.println("Sub 的无参数的构造函数被调用");
	}
	
	public Sub(String str){
		System.out.println("Sub 的带一个参数的构造函数被调用");
	}
	
	public static void main(String[] args) {
		Sub sub=new Sub();
	}
}
Base 的无参数的构造函数被调用
Sub 的无参数的构造函数被调用

4.2 显式调用父类有参构造

class Base {
    public Base(){
        System.out.println("Base 的无参数的构造函数被调用");
    }
    public Base(String str){
        System.out.println("Base 的带一个参数的构造函数被调用"+"--"+str);
    }
}

public class Sub extends Base{

    public Sub(){
        super("Java");
        System.out.println("Sub 的无参数的构造函数被调用");
    }

    public Sub(String str){
        System.out.println("Sub 的带一个参数的构造函数被调用");
    }

    public static void main(String[] args) {
        Sub sub=new Sub();
    }
}
Base 的带一个参数的构造函数被调用--Java
Sub 的无参数的构造函数被调用

4.3 父类有有参构造,无无参构造

class Base {
    public Base(String str){
        System.out.println("Base 的带一个参数的构造函数被调用"+"--"+str);
    }
}

public class Sub extends Base{

    public Sub(){
        System.out.println("Sub 的无参数的构造函数被调用");
    }

    public Sub(String str){
        System.out.println("Sub 的带一个参数的构造函数被调用");
    }

    public static void main(String[] args) {
        Sub sub=new Sub();
    }
}
There is no default constructor available in 'Base'9
There is no default constructor available in 'Base'13
  1. 此时子类的两个构造方法都报错了,因为子类没有显式调用父类含参构造方法,将默认调用父类无参构造,然而父类因为定义了一个有参构造,就不会再隐式添加无参构造了,因此报错;
  2. 解决问题的方法有两个,要么为父类显式添加一个无参构造函数,要么使子类的构造函数显式调用父类的有参构造函数;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值