Java中关于构造方法的详解

1.构造方法的意义

  对象都是有初始属性的,例如人一出生就有体重,身高等,而不同的婴儿会有不同的初始属性。在Java中,用构造方法来在创建对象的同时初始化对象的属性。

2.构造方法的特点
  1. 构造方法的名称与本类的名称相同
  2. 构造方法无返回值
  3. 如果在类中没有定义构造方法,那么编译器会默认赠送一个,给这个类一个构造方法。若已经定义了构造方法,那就不会赠送了。
3.构造方法与new之间的联系

  个人对这两个的理解,就是java通过使用new关键字调用构造方法创建对象。构造方法是用来初始化对象的,而创建对象时,初始化和创建是被捆绑在一起的。
看这个例子:

public class CreateObject {
	public CreateObject() { // 构造方法
		System.out.println("创建对象");
	}
	
	public static void main(String args[]) { // 主方法
		new CreateObject(); // 创建对象
	}
}
//输出:
创建对象

这程序说明了,在创建对象的同时,自动调用构造方法,二者是捆绑在一起的。
参考:穆哥学堂

4.无参构造和有参构造

先提一点:

  • 重写:子类对父类方法的覆盖
  • 重载:本类中的同名方法,参数不同

  这里提一点,关于构造方法,又被称为构造器,个人认为称为构造方法有助于加深记忆。既然他是一种方法,也存在方法的性质,那么就可以被重载(不能重写),这里即为有参构造。
  那么,为什么要有这两种构造方法呢?他们可以同时存在于一个类中吗?

  • 先理解一下第一个问题,例如养成游戏,在创建一个角色时,需要对角色的属性进行初始化,若使用无参构造,则所创建角色属性全为一样的,假如我们让初始的角色属性值不同,那么有参构造就起作用了。也就是说不同的对象部分的属性可能不相同,初始化时需要无参和有参的有机结合
  • 再看第二个问题,是可以同时存在于一个类中的,根据调用方法的格式,来决定调用的是哪种构造方法。

总的来说,构造方法用来创建对象同时初始化对象,而构造方法重载使得创建对象更加灵活,便于创建不同的对象。

5.继承中子类和父类构造方法的联系

先看下面一段代码:

class Parent { // 父类
	Parent() {
		System.out.println("调用父类的parent()构造方法");
	}
}

class SubParent extends Parent { // 继承Parent类
	SubParent() {
		System.out.println("调用子类的SubParent()构造方法");
	}
}

public class Subroutine extends SubParent { // 继承SubParent类
	Subroutine() {
		System.out.println("调用子类的Subroutine()构造方法");
	}
	
	public static void main(String[] args) {
		Subroutine s = new Subroutine(); // 实例化子类对象
	}
}
#输出结果
调用父类的parent()构造方法
调用子类的SubParent()构造方法
调用子类的Subroutine()构造方法

  可以看到,在继承的机制中,在实例化子类对象时,java编译器会在子类的构造方法中自动调用父类的无参构造方法,而不是子类继承了父类的构造方法。换句话说,实例化子类对象时首先要实例化父类对象,然后再实例化子类对象。
参考:java从入门到精通,清华大学出版社

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

通信仿真爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值