【问题标题】:why would I want a method that needs an instance?为什么我想要一个需要实例的方法?
【发布时间】:2011-08-17 14:28:49
【问题描述】:

为什么我需要一个需要实例的方法?为什么我不让我的所有方法都是静态的?

【问题讨论】:

  • 鉴于问题的简洁性,我可以在一定程度上合理化总体否决投票。我无法合理化的是一个与新程序员非常相关的问题的否决票。诚然,这个问题本来可以问得更好一些,但我认为这最终不值得 5 票反对。

标签: static-methods


【解决方案1】:

为什么您想要程序中任何位置的任何状态?

如果没有 String 实例,并且 String 上的所有内容都是静态的,你能想象吗?你将如何表示两个不同的字符序列?现在将相同的逻辑应用于其他代码。

从根本上说,OO 语言是围绕具有状态的对象的概念构建的:Book 的一个实例与Book 的另一个实例不同——每个Book 实例都封装了它的名称、作者、发布日期等. 你将如何只使用静态方法而不是实例来建模?

当然,您可以将所有方法设为静态,并在需要使用状态的每个调用中将Book 作为第一个参数传递in。在幕后,类似的事情已经在发生……除了你失去了多态性,所以接口、抽象类等都是无用的。不好。

【讨论】:

  • 先生,我明白了,非常感谢
【解决方案2】:

因为对象是状态和行为一起,封装在一个组件中。

如果您有单独的实例,这意味着它们每个都可以拥有因实例而异的私有数据。

静态数据和方法在类级别共享。单个实例不能有不同的静态数据。

【讨论】:

    【解决方案3】:

    静态方法不能直接访问对象中的成员变量——它们只能访问静态变量。

    如果你有一个汽车类和一个像整数这样的静态数据成员,你就只能拥有一辆汽车,因为你不能创建多个汽车实例并获得该变量的多个实例 - 你只会拥有单个静态的。

    每辆车不能有相同的车牌号,因此每辆车都需要自己的车牌变量。

    类中使用该变量的方法需要是非静态的才能直接使用它。

    【讨论】:

      【解决方案4】:

      使用“Car”类的示例,您可能有一个名为“startCar()”的方法。显然,您希望此方法仅与汽车的特定“实例”交互,而不是对所有汽车都是全局的。 Java 中的示例:

      public class Car {
        public void startCar() {
          // code to start car
        }
      }
      
      public class MyProgram {
        public static void main(String[] Args) {
          Car myFord = new Car();
          Car myOpel = new Car();
          myCar.startCar; // starts the Car "myCar" and leaves "myOpel" alone
        }
      }
      

      同样值得注意的是,静态方法可能不会使用定义它们的类的实例变量。

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 1970-01-01
        • 2014-11-07
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        相关资源
        最近更新 更多