суббота, 5 января 2013 г.

Вложенные классы

Бывают двух основных типов:
static nested classes - это больше похоже на обычный класс, который просто вложен в другой для удобства их совместной поставки. Такой класс не имеет доступа к скрытым методам и полям внешнего класса. Инстанциируется таким образом:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

inner classes -- эти друзья вяжутся к инстациям своего внешнего класса, они имеют доступ ко всем его полям и методам вне зависимости от их области видимости. Такие классы могут быть приватными, протектыд, паблик и пекидж прайвет. Вот так они создаются:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

local classes -- которые объявлены внутри конструктора или метода, и соответственно могут использоваться только внутри них.

anonymous inner classes -- эти классы создаются обычно из реализации какого-то интерфейса налету.


Рефлексия в яве тоже позволяет понимать с какием классом мы работаем, а также получать то что находится в нем внутри кроме полей и методов:

java.lang.Class
- getEnclosingClass
-getEnclosingConstructor
-getEnclosingMethod
-isAnonymousClass
-isLocalClass
-isMemberClass

Комментариев нет:

Отправить комментарий