java构造方法

构造方法

在Java中构造方法也就做构造函数或者构造器,它是一种用于创建类实例的特殊方法,构造方法的用途就是在创建对象时执行对象的初始化操作。

当对一个对象进行初始化,系统会默认地为对象中的属性进行初始化,初始化的原则是:数值类型的属性默认初始化为0,boolean类型的属性初始化为false,引用类型的属性初始化为null。但是如果要将这些属性初始化为其他的值,就需要通过构造函数来实现。

在Java中一个类里面至少包含一个构造方法。所以如果程序中没有显式地方一个构造方法,则系统会为这个类提供一个无参的构造方法。所以如果程序中没有显式地实现一个类定义构造方法,则系统会为这个类提供一个无参的构造方法,这个构造方法函数体为空,不做任何操作。但是一旦程序中显式定义了一个构造方法(无论是带参还是不带参数的),那么系统将不在提供默认的构造方法。

定义构造方法时需要注意以下几点:

  • 构造方法必须与类名一致。
  • 构造方法不能有返回类型,void也不行
  • 构造方法可以重载,即在同一个类中可以定义多个构造方法,通过参数列表的不同来区分不同的构造函数。
  • 在一个构造方法可以通过this(x,x)的形式调用另一个重载的构造方法,使用this调用另一个重载的构造函数只能在构造方法中使用,而且必须作为构造方法执行体的第一条语句
  • 在子类的构造方法中可以通过super(x,x)的形式调用父类的构造方法,使用super调用父类的构造方法也必须出现在子类构造方法执行体的第一行,因此在构造方法中this调用和super调用不能同时出现

构造方法从来都是Java基础的一个重点,所以大家要认真学习

构造函数是否能被继承?能否被重载?

构造函数是不能被继承的,也就是说,子类不能获得父类的构造函数。在前面的我们已经讲过,一个类里面至少包含一个构造方法,即使不显式地定义一个整数,系统也会为该类生成一个默认的构造函数。这就说明,子类是无法继承父类的构造方法的,必须在自身的类中定义

但有些时候子类构造函数中需要调用父类的构造函数,以便初始化父类的对象(子类中是包含父类的对象的),这时就需要使用super来引用调用父类的构造函数。

public class Base{
    public Base(int a){
        System.out.println("Constructor in Base,parameter a="+a);
    }
    public static voia main(String[] args){
        new Sub;
    }
}
class Sub extends Base{
    public sub(){
        super(1);
        System.out.println("Construtor is Sub");
    }
}

如上述这段代码,子类的构造方法中通过super(1)调用了父类的构造方法,所以再main方法中创建子类的对象时,首先会调用父类的构造方法,然后调用子类的构造方法。

这里需要注意一点,由于子类的对象中本身包含父类的对象,所以在构造子类对象时一定会构造父类对象,所以父类的构造方法一定会被调用。如果不显式地用super()调用父类的构造方法,系统也会隐式地调用父类的无参构造方法。

其次,构造函数是可以被重载的。同一个类中可以定义多个构造方法,通过参数列表的不同来区分不同的构造函数。同时可以通过this(x,x)的形式调用另一个重载的构造方法。

public class Base{
    public Base(int a){
        this();
        System.out.println("Constructor in Base,parameter a="+a);
    }
    public Base(){
        System.out.println("Constructor in Base,no parameter");
    }
    public static main(String[] args){
        new Base(1);
    }
}

在上面的代码中,带参的构造函数Base(int a)中第一行通过this()调用Base类的无参构造函数,所以在main方法中通过new Base(1)构造Base类的对象时,会直接调用无参的构造函数。

答案
  • 子类不能继承父类的构造方法,但可以通过super引用调用父类的构造方法
  • 构造方法可以被重载,同时在构造方法中可以通过this调用其他构造方法
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值