🚀 第12天 我的自动化之旅 – 理解 Java 中的多态
Source: Dev.to
📌 什么是多态?
多态意为“多种形态”。在 Java 中,它使相同的方法名根据传入的参数表现出不同的行为。
Java 中的两种多态
1️⃣ 编译时多态(方法重载)
2️⃣ 运行时多态(方法重写)
今天我们重点介绍 方法重载。
📌 什么是方法重载?
方法重载意味着:
- 相同的方法名
- 参数数量不同
- 参数类型不同
- 参数顺序不同
示例签名
debitamount(int amount, int pin)
debitamount(long amount, int pin, String name, double balance)
即使方法名相同,只要参数列表不同,Java 也会把它们视为不同的方法。
💻 示例程序 – ATM 交易
package polymorphism;
public class ATM {
public static void main(String[] args) {
ATM sbi = new ATM();
sbi.debitamount(1000, 123);
ATM icici = new ATM();
icici.debitamount(3000, 6364, "Rajiv", 10.23);
}
void debitamount(int amount, int pin) {
System.out.println("SBI Bank successfully debited " + amount);
}
void debitamount(long amount, int pin, String name, double balance) {
System.out.println("ICICI Bank successfully debited " + amount + " for " + name);
}
}
🔎 代码说明
Step 1 – 程序执行开始
Java 从 main() 方法开始执行:
public static void main(String[] args)
Step 2 – 对象创建
ATM sbi = new ATM();
- ATM → 类名
- sbi → 引用变量
new ATM()→ 在堆内存中创建对象
Step 3 – 调用第一个方法
sbi.debitamount(1000, 123);
Java 查找签名为 (int, int) 的方法并执行:
void debitamount(int amount, int pin)
输出
SBI Bank successfully debited 1000
Step 4 – 创建第二个对象
ATM icici = new ATM();
创建了第二个对象。
Step 5 – 调用重载方法
icici.debitamount(3000, 6364, "Rajiv", 10.23);
Java 现在搜索签名为 (long, int, String, double) 的方法并执行:
void debitamount(long amount, int pin, String name, double balance)
输出
ICICI Bank successfully debited 3000 for Rajiv
🧠 Java 如何决定调用哪个方法
编译器检查:
1️⃣ 方法名
2️⃣ 参数数量
3️⃣ 参数的数据类型
这个过程称为 编译时方法绑定,因为决定发生在编译期间。
🔍 实践中的重要发现
1️⃣ 整数默认类型
字面量如 100 默认被视为 int。
2️⃣ Byte / Short 不会自动接受
byte balance = 100; // error: possible lossy conversion from int to byte
可能需要显式强制转换:
byte balance = (byte) 100;
3️⃣ Long 值
对于 long 字面量我们通常在后面加 L:
long amount = 3000L;
Java 也可以在需要时自动将 int 提升为 long。
4️⃣ 小数
字面量如 10.23 默认是 double。若要存入 float,在后面加 f:
float balance = 10.23f;
double 不需要后缀,因为它是默认类型。
📊 Java 数值默认类型概览
| Value | Default Type |
|---|---|
100 | int |
100L | long |
10.5 | double |
10.5f | float |
在 Java 中,整数字面量默认是 int 类型。将它们赋给更小的类型(如 byte、short)可能需要强制类型转换。允许自动的宽化转换(例如 int → long),但不允许窄化转换(例如 int → byte)。十进制字面量默认是 double,除非使用 f 后缀将其指定为 float。
📚 第12天要点
- ✅ 什么是 Polymorphism
- ✅ method overloading 与 method overriding 的区别
- ✅ method overloading 在实践中的工作方式
- ✅ Java 在编译时如何选择重载方法
- ✅ Java 中数值字面量的默认行为
Meric 数据类型
Understanding polymorphism is important because it helps us write flexible and reusable code.
👨🏫 Trainer: Nantha from Payilagam
🤖 小提示
I used ChatGPT to help structure and refine this blog while ensuring the concepts remain aligned with my trainer’s explanations.
