Основы Java

Инициализация переменных по умолчанию

Поля, принадлежащие классу/объекту, по умолчанию инициализируются как 0 (ноль) для примитивных типов, и как null для ссылочных типов. Локальные переменные методов - нет. Если их не инициализировать явно, они так и останутся неинициализированными. ... Читать дальше »

Хитрый protected

Члены класса с областью видимости protected доступны наследникам независимо от местонахождения этих наследников. Однако, доступ к protected-членам родительского класса по ссылочным переменным зависит от пакета, в котором определён наследник.

По ссылочным переменным protected-члены доступны наследникам из того же пакета. Но наследникам из другого пакета они недоступны. ... Читать дальше »

Static. Принадлежат классу

Члены класса с модификатором static принадлежат этому классу, только этому и больше никакому.
Статические методы не переопределяются в классе-наследнике, методы родительского класса просто скрываются.

При компиляции вызываться будет метод того класса, который послужил типом для ссылочной переменной. ... Читать дальше »

Static. Существуют всегда

Статические переменные и методы принадлежат классу, а не объекту. Они существуют даже если ни один объект не был создан. Доступ к ним можно получить, даже если ссылочная переменная проинициализирована как null!!!
В статических методах нельзя вызывать non-static переменные или методы, т.к. на момнет их вызова, non-static члены класса еще не существуют - они существуют только в объекте.
Но в non-static можно вызывать static методы и переменные, т.к. они существуют независимо от того, был создан объект или нет. ... Читать дальше »

Импорт пакетов с одноимёнными классами

При импорте пакетов, содержащих классы с одинаковыми именами, не возникает конфликтов, если класс из одного из пакетов импортируется явно по имени.
Если требуется обратиться к классу с таким же именем из другого пакета, придётся указывать его полное квалификационное имя. ... Читать дальше »

Import

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

Нельзя импортировать из разных пакетов классы с одинаковыми именами. ... Читать дальше »

Несколько классов в одном файле. Public

Когда класс или интерфейс объявляется как public, его название должно совпадать с названием java-файла.
Т.о. java-файл может содержать сколько угодно классов/интерфейсов с пакетной зоной видимости и только один public-класс или public-интерфейс, имя которого совпадает с именем этого файла. ... Читать дальше »

Несколько классов в одном файле. Default

В одном java-файле можно объявлять сколько угодно классов и интерфейсов с пакетной зоной видимости. Такой файл может иметь любое имя.
Все классы и интерфейсы в таком файле должны находиться в одном пакете, они не могут быть в разных пакетах. ... Читать дальше »

Модификаторы доступа и не-доступа для типов Java

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

default – это область вызова, а не модификатор доступа. Т.о. областей видимости четыре, а модификаторов три.

Все классы, интерфейсы и enum верхнего уровня (не вложенные в другие типы) могут иметь область видимости только public или пакетную (default). Внешний класс не может быть private или protected, это приводит к ошибке компиляции. Вложенные и внутренние типы могут иметь любой модификатор доступа. ... Читать дальше »