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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Информация о доступе 'no modifier' здесь:

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

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

Ответ 4

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

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

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

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

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

Ответ 5

Метод private - это метод, к которому не может получить доступ любой другой объект за пределами области его применения.

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

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

Члены public видны всем остальным классам. Это означает, что любой другой класс может получить доступ к полю или методу public.

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

Ответ 6

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

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