2015-09-05 2 views
0

Я новичок в Java и работаю над проблемой домашней работы. Проблема заключается в создании класса температуры с конструктором, который принимает температуру Фаренгейта (как двойной) и сохраняет его в поле ftemp. Метод setFahrenheit принимает температуру по Фаренгейту (как двойной) и сохраняет его в поле ftemp.Java - Реконструкция конструктора и метода

Это кажется излишним для меня. Не будет ли метод setFahrenheit делать то, что делает конструктор?

ответ

1

Nope. Что произойдет, если температура изменится? Вы не можете создать новый температурный класс, потому что это означает, что вы создаете совершенно новый объект. setFarenheit() позволяет вам изменять температуру в этом конкретном классе.

Вот еще один пример: скажите, что у вас есть класс под названием Person, и вы передаете возраст человека в конструкторе. У вас должен быть метод setAge() в классе, потому что Person со временем станет старше, и это будет довольно неэффективно, если вы создадите копию человека только для изменения своего возраста.

+0

Спасибо за ответ. Будет ли метод setAge() нужен аргумент, если у Constructor есть параметры? – JacobA

+0

Ему не понадобилось бы никакого аргумента. Вы можете просто увеличить возраст на 1, если хотите, или вы можете дать ему аргумент и установить для него атрибут class. – ninesalt

0

Цитирование ответ, данный по следующему адресу: Methods vs Constructors in Java

Важное различие между конструкторами и методами является то, что конструкторы для создания и инициализации объектов, которые еще не существуют, а методы выполнения операций на объектах, которые уже существуют , Конструкторы не могут быть вызваны напрямую; они называются неявно, когда новое ключевое слово создает объект. Методы могут быть вызваны непосредственно на объект, который уже был создан с новым. Определения конструкторов и методов выглядят одинаково в коде. Они могут принимать параметры, у них могут быть модификаторы (например, public), и они имеют тела методов в фигурных скобках. Конструкторы должны быть названы с тем же именем, что и имя класса. Они не могут вернуть ничего, даже пустое (сам объект является неявным возвратом). Методы должны быть объявлены, чтобы вернуть что-то, хотя оно может быть недействительным.

Предоставлено rgettman

0

Когда вы создаете новый объект температуры, вы даете ему значение по Фаренгейту. Однако что произойдет, если вы хотите изменить значение объекта? Вы не можете использовать конструктор снова, так как это приведет к созданию нового объекта вместо изменения текущего. Таким образом, вместо этого вы можете вызвать метод setFahrenheit на свой объект, что изменит его значение по Фаренгейту.

0

Да и нет. Конструктор используется для создания объекта с температурой, а затем устанавливает температуру в значение, которое вы передаете в нее. Этот метод позволит вам изменить значение температуры в любом месте вашего кода.

0

Конструктор вызывается только один раз. После создания объекта вы не можете «воссоздать» его, вы можете сделать только новый. Если вы хотите изменить существующий, вам необходимо использовать установщик.

1

1) Предположим, если у вас есть также один пустой конструктор и вы создаете один Temperature объект temp, как

temp=new Temparature(); 

Для температуры, ftemp поле остается пустым.Итак, если вы хотите установить ftemp, вы будете использовать setFahrenheit метод как

temp.setFahrenheit(12); 

2) Опять же, если вы создаете Temparature объект с ftemp в конструкторе,

temp=new Temparature(22); 

Далее, что вы будете сделать, если вы хотите изменить ftemp для этого временного объекта? вы будете использовать метод setFahrenheit() с новым значением ftemp снова, правильно?

Надеюсь, это очистит ваше сомнение.

+1

Спасибо, это хорошее объяснение. – JacobA

0

Да, но есть нечто большее, чем то, что может появиться на поверхности.

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

    Это общий шаблон, если вы хотите создать изменяемый объект. Иногда проще это разрешить, чем принуждать неизменяемый шаблон (хотя это плохая практика, если вы хотите использовать это в многопоточном контексте, так как вы не можете легко гарантировать безопасность потока).

  • Если это не единственный конструктор; то есть у вас есть конструктор no-arg, который не инициализирует, тогда переменная будет установлена ​​на значение по умолчанию. В этом случае вам нужно создать экземпляр объекта, а затем установите поле ftemp на то, о чем вас беспокоило.

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

Смежные вопросы