Java入门问题:Garaz类方法无法获取Samochod实例的自定义属性值
解决Garaz类wypiszInfo输出Samochod默认属性值的问题
问题根源
你的问题出在Garaz类的wprowadzSamochod方法中——该方法没有正确存储你在main里创建的Samochod实例,反而在方法内部新建了一个使用默认构造器初始化的Samochod对象,所以wypiszInfo输出的是这个新对象的默认属性值(如marka="nieznany"),而非Fiat、126p这类自定义值。
修正代码示例
1. 修正Garaz类的wprowadzSamochod方法
public class Garaz { private Samochod parkedCar; // 存储入库车辆的成员变量 // 修改方法,接收外部传入的Samochod实例 public void wprowadzSamochod(Samochod carToPark) { // 直接引用传入的实例,而非新建默认对象 this.parkedCar = carToPark; } public void wypiszInfo() { if (parkedCar != null) { System.out.println("Marka: " + parkedCar.getMarka()); System.out.println("Model: " + parkedCar.getModel()); // 按需添加其他属性的输出 } else { System.out.println("Garaz jest pusty"); } } }
2. 确保Samochod类有正确的构造器和getter
public class Samochod { private String marka; private String model; // 带参数的构造器,用于初始化自定义属性 public Samochod(String marka, String model) { this.marka = marka; this.model = model; } // 默认构造器(保留的话,属性用默认值初始化) public Samochod() { this.marka = "nieznany"; this.model = "nieznany"; } // getter方法,供Garaz类读取属性 public String getMarka() { return marka; } public String getModel() { return model; } }
3. Main函数的正确调用
public class Main { public static void main(String[] args) { Samochod s1 = new Samochod("Fiat", "126p"); Samochod s2 = new Samochod("Volkswagen", "Golf"); Garaz garaz = new Garaz(); garaz.wprowadzSamochod(s1); garaz.wypiszInfo(); // 输出Marka: Fiat, Model: 126p garaz.wprowadzSamochod(s2); garaz.wypiszInfo(); // 输出Marka: Volkswagen, Model: Golf } }
关键说明
- 核心修正:让
wprowadzSamochod接收外部传入的Samochod实例,直接将该实例赋值给Garaz的成员变量,这样存储的就是你在main里初始化的自定义对象。 - 必须保证
Samochod类提供getter方法,否则Garaz类无法访问其私有属性;同时使用带参数的构造器创建自定义属性的车辆实例。
内容的提问来源于stack exchange,提问作者Mazureekk
相关产品推荐
相关产品推荐

