зачем мне метод, которому нужен экземпляр? - PullRequest
0 голосов
/ 17 августа 2011

Зачем мне метод, которому нужен экземпляр? Почему бы не сделать все мои методы статичными?

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

С чего бы вам не хотеть какого-либо состояния в вашей программе?

Можете ли вы представить, если бы не было экземпляров String, и все в String было статичным? Как бы вы представили две разные последовательности символов? Теперь примените ту же логику к другому коду.

По сути, ОО-языки построены на идее объектов с состоянием: один экземпляр Book отличается от другого экземпляра Book - каждый экземпляр Book инкапсулирует свое имя, автора, дату публикации и т. Д. Как бы вы смоделировали это, используя только статические методы и без экземпляров?

Конечно, вы могли бы сделать все ваши методы статичными и передать в a Book в качестве первого параметра в каждом вызове, который должен был использовать состояние. За кулисами что-то вроде этого уже происходит ... за исключением того, что вы потеряли полиморфизм, поэтому интерфейсы, абстрактные классы и т. Д. Бесполезны. Не хорошо.

2 голосов
/ 17 августа 2011

Поскольку объекты являются состоянием и поведением вместе, инкапсулированы в один компонент.

Если у вас есть отдельные экземпляры, это означает, что каждый из них может иметь личные данные, которые варьируются от экземпляра к экземпляру.

Статические данные и методы передаются на уровне класса. Отдельные экземпляры не могут иметь разные статические данные.

0 голосов
/ 30 августа 2012

Используя пример класса "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
  }
}

Стоит также отметить, что статические методы могут не использовать переменные экземпляра класса, в котором они определены.

0 голосов
/ 17 августа 2011

Статические методы не могут напрямую обращаться к переменным-членам в объекте - они могут обращаться только к статическим переменным.

Если у вас есть класс автомобиля и статический член данных, например целое число, вы можете толькокогда-либо иметь один автомобиль, потому что вы не можете сделать несколько экземпляров автомобилей и получить несколько экземпляров этой переменной - у вас будет только один статический.

Каждый автомобиль не может иметь одинаковый номерной знак, таким образомкогда-либо автомобиль нуждается в собственной переменной номерного знака.

Методы в классе, работающие с этой переменной, должны быть нестатичными, чтобы работать с ней напрямую.

...