2011-08-17 156 views
-3

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

+0

鉴于问题的简洁性,我可以稍微合理化总投票。我不能合理化的是一个与新程序员非常相关的问题的投票。当然,这个问题可能会有所提高,我认为这最终不会得到5票的反对。 –

回答

3

为什么你不是想在你的程序的任何地方任何状态?

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

从根本上说,面向对象的语言与周围状态对象的思想构建的:的Book一个实例是不一样的的Book另一个实例 - 每个Book实例封装它的名字,作者,出版日期等你将如何模型只有静态方法,没有实例?

当然,你可以所有的方法静态的,一个Book传递作为一个需要使用状态每次调用的第一个参数。在幕后,几乎就像这样的事情已经发生......除了你失去了多态,所以接口,抽象类等都没用。不好。

+0

我明白先生,非常感谢 – MahendraSK

2

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

如果您有单独的实例,则表示它们每个都可能具有随实例而异的私有数据。

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

0

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

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

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

与该变量一起工作的类中的方法需要非静态才能直接在其上工作。

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 
    } 
} 

这也是值得注意的是,静态方法可以不利用它们所定义的类的实例变量。

相关问题