2015-04-24 4 views
0

В учебнике «Весна» я прочитал следующее, рассказывающее об аспектах.Как конструкторы отличаются от обычных методов в Java?

В отличие от конструкторов на большинстве других языков ООП конструкторы Java отличаются от обычных методов.

Это правда? Если да, то почему и как? Я понимаю разницу и важность методов «Конструкторы против нормального». Но разве эта разница в C++ такая же, как в Java? Или есть ли какие-либо другие настройки этой разницы в Java?

Моя точка зрения сосредоточена на сравнении с другими языками ООП, такими как C++.

Скажите A является объяснением разницы между конструкторами и нормальными методами в Java. Скажем B - это объяснение разницы между конструкторами и нормальными методами на любом другом языке ООП. Я хочу знать разницу между A и B, если таковая имеется?

+1

можете ли вы опубликовать ссылку, в которой вы читаете это, возможно, у вас есть какой-то контекст, чтобы ответить на ваш вопрос. – Abubakkar

+0

Моя точка зрения сосредоточена на сравнении с другими языками ООП, такими как C++. –

+0

в каждом языке ООП в мире * конструкторы отличаются от обычных методов. * –

ответ

1

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

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

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

0

Давайте рассмотрим эту инструкцию:

Foo a = new Foo(); 

Первая часть new Foo(); операция объединения оператора (new) и операнд (Foo()). За кулисами это выделяет память в куче размером Fooкласс, со временем заполняя ее, вызывая то, что мы называем конструктором , и возвращает ссылку на этот вновь созданный объект.

Вторая часть Foo a = объявляет переменную типа Foo, которая запоминает ссылку, указанную в приведенной выше части.

Теперь, когда у нас есть ссылка на экземпляр Foo, мы можем вызвать некоторые методы этого объекта. Например:

a.makeNoise(); 

метод не может быть вызван с new оператора (syntaxically неправильно) и не выделяет память в куче, но вместо того, чтобы выполнить список команд.

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

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