为什么我需要一个需要实例的方法?

时间:2011-08-17 14:28:49

标签: static-methods

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

4 个答案:

答案 0 :(得分:3)

为什么

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

从根本上说,OO语言是围绕具有状态的对象的思想构建的:Book的一个实例与Book的另一个实例不同 - 每个Book实例封装其名称,作者,出版日期等。你如何用静态方法建模,没有实例?

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

答案 1 :(得分:2)

因为对象是状态和行为,所以将它们封装在一个组件中。

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

使用“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
  }
}

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