为什么我需要一个需要实例的方法?为什么我不能使我的所有方法都是静态的?
答案 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
}
}
值得注意的是,静态方法可能不会使用定义它们的类的实例变量。