Новый синтаксис для классов-членов в Java
При использовании классов членов, которые можно было использовать для получения явных ссылок на включающий экземпляр текущего экземпляра классов-членов. В общем случае синтаксис использовался следующий:
classname.this
classname - имя включающего класса
Классы-члены могут включать в себя другие классы-члены с любой глубиной вложения, при этом имена классов членов не должны совпадать.
Пример:
(this.name) - с
(c.this.name) - с
- с
- b
- a
Правильно использовать интерфейс к влож классов членам
+ определение метода Enumeration
В данном примере нигде не указывается каким должен быть экземпляр класса, соответствующего новому экземпляру Enumeration для явного указания данной информации в Java 1.1 определен новый синтаксис для оператора New при использовании классов-членов.
<conteiner>.new
container - выражение, которое определяется где определен класс-член
Соответственно для примера с классами a, b, c, которые вложены иерархически друг в друга могут использоваться следующим образом:
A a =new A();
AB b = a new B ();
ABC c = b new C ()
В выражениях new используются имена классов, экземпляры которых необходимо создать в сочетании именных экземпляров, где они будут содержаться. С появлением классов-членов возникает 2 иерархии, которые следуют учитывать для каждого класса-члена:
1. это иерархия, прослеживаемая от суперкласса до подкласса, где определены переменные, наследуемые классом членом.
2.иерархия вложенности, прослеживаемая от включаемого класса до вложенного класса, в котором определяются переменные, находящиеся в области видимости класса-члена.
эти 2 иерархии для классов-членов различны. Когда происходит конфликт между именами наследуемых переменных или методов и именами аналогичных элементов включающего класса Java требует явного указания класса, к которому относится вызываемая переменная или метод, если класс-член B наследует переменную х от класса А, где так же определена переменная х, то необходимо использовать конструкцию this.x Для ссылки на наследуемую переменную или a.This.x для ссылки на переменную включающего класса.
На классы-члены накладываются 2 важных ограничения:
1. классы-члены не может иметь имя, совпадающее с имененем любого включающего класса (не относится к переменным и методам)
2. классы-члены, как все встроенные классы не могут включать в себя статические элементы (переменные, методы и классы, объявленные как static) так как статические конструкции Java являются конструкторами верхнего уровня.
Локальные классы
