You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现共享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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:25:14