如何实现共享Car类通用特征的Person实例修改Car属性互不影响?
解决思路:共享汽车通用特征,独立管理油量
问题根源很明确:你现在让多个Person实例引用同一个Car对象,所以修改其中一个的油量,所有关联的Person都会看到变化。要实现「共享通用特征(比如model),但每个Person的油量独立」,可以用以下几种方法:
方法一:给Car添加复制方法,每个Person持有副本
让每个Person在初始化时,创建原Car的副本,这样通用特征(比如model,因为String是不可变类型,副本的model会和原对象共享同一个字符串实例)得以保留,而油量是每个副本独立的属性。
修改后的代码:
class Car { int volume; String model; public Car(int volume, String model) { this.volume = volume; this.model = model; } // 创建当前Car的副本 public Car copy() { return new Car(this.volume, this.model); } } class Person { String name; Car car; // 接收原Car,但内部保存副本 public Person(String name, Car originalCar) { this.name = name; this.car = originalCar.copy(); } public void decreaseVolume() { this.car.volume--; } }
使用示例:
Car sharedCarTemplate = new Car(100, "Ford100"); Person p1 = new Person("Alice", sharedCarTemplate); Person p2 = new Person("Bob", sharedCarTemplate); p2.decreaseVolume(); // p1.car.volume = 100,p2.car.volume = 90,互不影响 // 两者的model都是"Ford100",保持通用特征一致
方法二:拆分共享与可变属性到不同类
把汽车的通用共享特征(比如model)单独抽成一个CarModel类,每个Car实例持有这个CarModel的引用,而油量是Car自己的可变属性。这样多个Car可以共享同一个CarModel,保证通用特征一致,同时各自管理独立的油量。
修改后的代码:
// 存放共享的汽车通用特征 class CarModel { String model; public CarModel(String model) { this.model = model; } } // 每个Person对应的Car,持有共享的CarModel,自己管理油量 class Car { int volume; CarModel model; public Car(int volume, CarModel model) { this.volume = volume; this.model = model; } } class Person { String name; Car car; public Person(String name, Car car) { this.name = name; this.car = car; } public void decreaseVolume() { this.car.volume--; } }
使用示例:
CarModel ford100Model = new CarModel("Ford100"); Person p1 = new Person("Alice", new Car(100, ford100Model)); Person p2 = new Person("Bob", new Car(100, ford100Model)); p2.decreaseVolume(); // p1.car.volume = 100,p2.car.volume = 90 // 两者的car.model.model都是"Ford100",共享通用特征
这种方法更适合后续扩展——如果以后有更多共享属性(比如品牌、生产年份),直接加到CarModel里即可,不用修改Car的结构。
内容的提问来源于stack exchange,提问作者Tepa6auT
相关产品推荐
相关产品推荐

