【问题标题】:How to affect all objects of a class? (Java)如何影响一个类的所有对象? (爪哇)
【发布时间】:2013-05-03 11:10:27
【问题描述】:

我有点不确定如何提出这个问题。它是关于面向对象的思想,在我的例子中是 Java,但更多的是关于一般概念。

为了练习数组和继承等,我想创建一个小系统,其中有可以由 People 对象拥有的 Car 对象,这些对象将他们的汽车存储在数组中。汽车会有价值,People 对象可以用钱相互买卖汽车。

我的问题:

我希望有一个我可以调用的子程序让一年过去,这将增加一个年份计数器,并降低程序中当前存在的所有汽车的价格,并将它们的“年龄”增加 1 . 类似的事情。

我意识到我不知道如何做这样的事情;如何执行这样的操作,它的目标不是特定对象,而是特定类的每个对象?我想这种操作在大程序中很常见,你通常是怎么做的?

【问题讨论】:

  • 你可以使用static变量。

标签: java oop class object global


【解决方案1】:

你不能,真的。至少不干净。

首先,您需要保留对 Car 对象的引用,否则它们将被垃圾回收(从内存中删除)。

由于您保留对他们的引用(可能在 People 对象下),您可以遍历所有人员并获取他们的汽车,或者您可以保留一个单独的容器(例如,ArrayList)来保存所有汽车。这意味着这些汽车可以通过人或您的单独容器获得。然后你遍历容器并在汽车上做你想做的事。

【讨论】:

    【解决方案2】:

    要使汽车老化一年,您只需要在 Car 类中拥有一个属性 int buildYear

    问题的第二部分。每辆车都有一个属性float amortizationPercentPerYear。根据车龄、amortiationPercentPerYear 和初始价格,您可以计算出准确的价格。

    【讨论】:

      【解决方案3】:

      您要么需要Car 中的静态实例ArrayList<Car>,要么更好地保存每个Car 中的构建年份并计算价格:

      class Car
      {
          private static int currentYear = 2013;
      
          public static void newYear() { ++currentYear; }
      
          private int constructYear;
          private double newPrice;
      
          public Car(double price)
          {
              newPrice = price;
              constructYear = currentYear;
          }
      
          public int getAge() { return currentYear - constructYear; }
      
          public double getPrice() { return newPrice - newPrice * getAge() * CONSTANT; }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        相关资源
        最近更新 更多