为何自定义Cereal类的访问器方法输出其他对象的属性值?
问题分析与修复方案
问题根源
你的Cereal类中,name变量和getName()方法都使用了static修饰符——static成员属于类本身,而非类的实例对象,所有Cereal对象会共享同一个name值:
- 创建
frostedFlakes时,将类共享的name设为"frosted Flakes" - 创建
LuckyCharms时,又把这个共享的name覆盖成了"Lucky Charms" - 调用
frostedFlakes.getName()时,实际取的是类级别的共享name,因此输出"Lucky Charms"
修复方案
去掉name和getName()的static修饰符,让它们成为实例成员,每个对象拥有独立的name值:
修改后的Cereal类代码:
import java.io.*; public class Cereal { // 实例变量:去掉static,每个对象拥有独立的name private String name; // 构造方法 Cereal(String name){ this.name = name; } // 实例方法:去掉static,访问当前对象的name public String getName(){ return name; } }
MyProgram类无需修改,运行后会正常输出"frosted Flakes"。
补充说明
- static变量用于存储类的全局共享状态(比如常量、统计计数),不适合保存每个对象独有的属性
- 非static的实例方法,才能访问当前对象的实例变量,调用时依赖具体的对象实例
内容的提问来源于stack exchange,提问作者Gisel Guerrero
相关产品推荐
相关产品推荐

