
当方法声明为void时,它不返回任何值,因此无法将其结果赋值给int等基本类型变量;解决方法是将方法返回类型改为int,并在方法末尾添加对应的return语句。
当方法声明为void时,它不返回任何值,因此无法将其结果赋值给int等基本类型变量;解决方法是将方法返回类型改为int,并在方法末尾添加对应的return语句。
在面向对象编程(尤其是Java)中,方法的返回类型必须与其调用上下文严格匹配。你遇到的编译错误:
error: incompatible types: void cannot be converted to int int returned = savingsTest.withdraw(200);
根本原因在于:withdraw() 方法当前声明为 public void withdraw(...),即不返回任何值(void),但你在调用时却试图将其结果赋值给一个 int 类型变量 returned——这在Java中是语法非法的,因为void不是可转换为int的类型。
✅ 正确修复步骤
- 修改方法签名:将 void withdraw(...) 改为 int withdraw(...);
- 补充return语句:在方法体末尾返回一个有意义的int值(如更新后的余额);
- 避免副作用混淆:建议在计算新余额时先保存再更新,提高可读性与调试安全性。
以下是修正后的 withdraw 方法示例:
public int withdraw(int amountToWithdraw) {
int newBalance = balance - amountToWithdraw;
balance = newBalance; // 更新账户余额
System.out.println("You just withdrew " + amountToWithdraw);
return newBalance; // 必须返回int值,与声明类型一致
}同理,若你也希望 deposit() 方法支持链式调用或状态检查,可同样改为 public int deposit(int amount) 并返回更新后的余额:
立即学习“Java免费学习笔记(深入)”;
public int deposit(int amountToDeposit) {
balance += amountToDeposit;
System.out.println("You just deposited " + amountToDeposit);
return balance;
}⚠️ 注意事项
- 不要只改返回类型而不加return:否则会触发 missing return statement 编译错误(正如你尝试后遇到的);
- 避免直接返回表达式如 return balance -= amountToWithdraw;:虽语法合法,但可读性差,且不利于调试;
- 业务逻辑一致性:若withdraw()可能因余额不足而拒绝操作,应进一步引入条件判断与异常/布尔返回机制,而非无条件扣款;
- 调用端同步更新:原代码中 int returned = savingsTest.withdraw(200); 才能真正获取并使用新余额,此前的void版本该语句完全无效。
通过这一修改,你的类不仅消除了编译错误,还增强了API的实用性——方法既能改变状态,又能反馈结果,符合良好OOP设计中“行为与信息兼顾”的原则。


















