Шаблоны использования для частных, статических, конечных, общедоступных, абстрактных ключевых слов в java

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

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

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

спасибо заранее, Энтони!--3-->

5 ответов


на новичкам, вот мои правила:

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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


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

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