48. Java 类和对象 - 构造函数
🚀 Java 构造函数讲解
大家好!今天我们来聊聊 Java 中的构造函数(Constructor)。别紧张,构造函数听起来很正式,但其实它就是帮我们在创建对象的时候顺便初始化一下它的“出生状态”。我们一步步来!
🌟 什么是构造函数?
构造函数的主要作用是:
✅ 创建对象并初始化它!
它跟普通方法很像,但有三个显著区别:
- 名字必须和类名一样。像个身份证,名字必须对上!
- 没有返回类型。不是
void
,不是int
,啥都不写! - 用
new
关键字调用,你不会直接调用构造函数,而是通过new
创建对象时触发它。
📦 语法示例
public class Bicycle {
public int cadence;
public int speed;
public int gear;
// 带参数的构造函数
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// 无参数的构造函数
public Bicycle() {
gear = 1;
cadence = 10;
speed = 0;
}
}
🎯 如何使用构造函数?
Bicycle myBike = new Bicycle(30, 0, 8); // 调用带参数的构造函数
Bicycle yourBike = new Bicycle(); // 调用无参数构造函数
- 带参数的构造函数 会用你传入的值初始化对象,比如
startCadence
、startSpeed
、startGear
。 - 无参数的构造函数 则会使用默认值。
⚡ 构造函数的工作原理
当你写:
Bicycle myBike = new Bicycle(30, 0, 8);
Java 做了两件事:
- 分配内存:创建一个
Bicycle
对象。 - 调用构造函数:执行带参数的构造函数,把你给的数值赋给对象的字段。
如果你写:
Bicycle yourBike = new Bicycle();
Java 就调用无参数构造函数,使用默认值初始化。
✅ 重点: 没有 new
,就不会调用构造函数!
🌈 构造函数重载
重载(Overload) 就是你可以写多个构造函数,只要参数不同就行。比如:
public Bicycle() {...}
public Bicycle(int startCadence) {...}
public Bicycle(int startCadence, int startSpeed) {...}
Java 会根据你传的参数来决定调用哪一个。
🎯 注意事项:
- 不能只靠返回类型来区分构造函数!因为它没有返回类型!
- 如果两个构造函数参数一样,Java 会迷惑然后报错。
🔥 默认构造函数
如果你没写任何构造函数,Java 会自动给你一个“隐形”的无参数构造函数,类似于:
public Bicycle() {}
但如果你写了带参数的构造函数,Java 就不会再自动生成默认构造函数了!所以想要无参数构造函数得自己写!
🎯 重点: 如果你的类继承了别的类,Java 会自动调用父类的无参数构造函数。如果父类没有无参数构造函数,你就得手动调用 super()
。
🌟 super 关键字调用父类构造函数
当你继承一个类时,子类的构造函数可以用 super(...)
调用父类的构造函数。
public class MountainBike extends Bicycle {
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
}
}
✅ 作用: 确保父类的属性也被初始化!
🎯 构造函数的访问修饰符
构造函数也能用访问修饰符控制谁能创建对象:
- public:所有类都能访问。
- private:只能在本类中访问(常用于单例模式)。
- protected:子类和同包的类可以访问。
- 默认(包访问权限):同包的类可以访问。
✅ 小结
今天我们学到了:
- 构造函数的作用:初始化对象!
- 语法特点:
- 名字和类名一样
- 没有返回类型
- 用
new
调用
- 构造函数重载:参数不同就可以多个构造函数共存。
- 默认构造函数:你不写时,Java 会偷偷帮你写。
- super 关键字:继承时调用父类的构造函数。
- 访问修饰符:控制谁能创建对象。
构造函数让对象一出生就带着合适的“初始装备”,而不是“裸奔”!希望大家理解啦!🚀