Шаблоны использования для частных, статических, финальных, публичных, абстрактных ключевых слов в Java - PullRequest
9 голосов
/ 22 февраля 2011

Я знаю , что делает все это, кроме абстрактных.В настоящее время я нахожусь в процессе обучения самому java с тем, что я считаю образованием на уровне средней школы (моя старшая школа была в плохом районе, так что меня уволили) ...

Но что именношаблоны для этих ключевых слов?Когда я использую что?Когда я их опускаю?Помещение «public» перед моими классами делает каждый класс, который использует его, требует нового файла, могу ли я просто опустить это, если я хочу создать монолитный исходный файл?

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

Заранее спасибо, Энтони

Ответы [ 5 ]

37 голосов
/ 22 февраля 2011

Источники сообщают, что означают эти ключевые слова, потому что, когда / почему / где они используются, следует из этого. Например, в моих объяснениях есть слово «когда», но они прямо следуют из семантики ключевых слов.

  • private следует использовать, когда что-то не используется за пределами данного класса
    • для методов и полей - когда они используются только внутри одного класса
    • для классов - только для вложенных классов при использовании в одном классе
  • protected следует использовать, когда
    • для методов и полей - когда вам нужно сделать их доступными только для подклассов
    • для классов - опять-таки только вложенные классы, доступные для подклассов
  • public используется, когда что-то доступно каждому другому классу

Вышеупомянутые три являются «модификаторами видимости». Они используются, когда вы хотите ограничить использование некоторых методов / полей / классов группой объектов и скрыть их от других объектов. Есть еще один модификатор видимости - по умолчанию (когда других нет). Он используется, когда вы хотите, чтобы ваш класс / метод / поле был доступен только для классов из одного пакета.

  • static используется, когда вам не нужен экземпляр класса (т.е. объект) для его использования:
    • для полей - когда вы хотите иметь глобальное поле
    • для методов - когда вам нужны вспомогательные функции, которые не зависят от состояния объекта
    • для вложенных классов - когда вы хотите получить к ним доступ без экземпляра включающего класса.
  • abstract, если вы не хотите предоставлять реализации в текущем классе:
    • для методов - когда подклассы должны предоставлять фактическую реализацию, но вы хотите вызывать эти методы (независимо от того, как они реализованы) в этом классе.
    • для классов - для обозначения того, что класс может иметь абстрактные методы.
  • final - когда вы не хотите, чтобы что-то изменилось.
    • в полях, когда вы хотите присвоить значение только один раз. Это полезно, когда вы хотите передать локальную переменную во внутренний класс - вы должны объявить ее окончательной.
    • для классов и методов - когда вы не хотите, чтобы подклассы могли расширять / переопределять их.
10 голосов
/ 22 февраля 2011

Для новичков , вот мои эмпирические правила:

  1. Public: все классы должны быть публичными (это не совсем так, но это довольно близко).Что касается методов, подумайте о своем телевизоре: то, что вы ожидаете сделать на своем телевизоре, является «общедоступным».
  2. Частный: детали реализации должны быть частными.Подумайте о своем телевизоре: функциональность является частной, если аналогичные вещи для телевизора должны быть частными, потому что пользователь может навсегда испортить телевизор, получить удар током и т. Д.
  3. Защищено: пока игнорируйте это.
  4. Аннотация: Лучший пример, который я прочитал при изучении Java, - подумать о «птице».Птица является абстрактной, и поэтому будет иметь «абстрактный» метод полета.Отдельные виды птиц умеют летать (если только они не пингвины - тогда они выбрасывают UnsupportedOperationException).

Я настоятельно рекомендую вам побороть желание использовать один монолитный исходный файл.Старайтесь, чтобы методы были короче одного экрана, а классы короче 300 строк.

6 голосов
/ 22 февраля 2011

Божо довольно хорошо рассмотрел использование ключевых слов, но я добавлю, что если вы вообще не объявляете область действия, ваша область становится частной для пакета, что означает, что любой пользователь в том же пакете, что и класс, может использовать это. класс / метод. По сути, он более разрешительный, чем private, но менее разрешительный, чем просто protected, так как protected разрешает доступ извне пакета.

Информация о доступе без модификаторов здесь:

Я рекомендую пройти обучение по Java:

А также взгляните на вопросы книги, если вы хотите больше узнать о Java:

2 голосов
/ 22 февраля 2011

private, public и protected все используются для объявления Scope класса для переменной.

static означает, что определяемая вещь являетсячлен класса, а не объект, который является экземпляром класса.

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

final означает, что переменной можно присвоить переменную только один раз при ее создании.Окончательный класс / метод не может быть унаследован / переопределен, соответственно.

Избегайте размещения всего в одном большом файле.Используйте IDE, например Eclipse, и вам будет легко работать с кодом, который имеет один класс на файл.Это позволяет вам лучше организовать свой код и инкапсулировать код, чтобы вы не оказались в ситуации, когда все знают обо всем.Это приведет к ошибкам, так как станет легче случайно использовать что-то, что было создано для другой цели.

0 голосов
/ 22 февраля 2011

Чтобы понять, когда / почему / где используется это ключевое слово, вы должны понять некоторые ключевые концепции объектно-ориентированного программирования и Java. Я предлагаю изучить Инкапсуляция и Полиморфизм .

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

...