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

Автор: admin от 10-11-2017, 17:05, посмотрело: 431

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



Добрый день, Хабровчане! На собеседованиях мне довольно часто попадались вопросы про вложенные классы. Поэтому я решил разобраться в них, систематизировать свои знания, а заодно и поделиться этими знаниями с вами.



Вложенный класс (InnerClass)



public class OuterClass {
    public class InnerClass{
    }
}


Из него видны:



— все (даже private) свойства и методы OuterClassа обычные и статические.

— public и protected свойства и методы родителя OuterClassа обычные и статические. То есть те, которые видны в OuterClassе.



Его видно:



— согласно модификатору доступа.



Может наследовать:



— обычные классы.

— такие же внутренние классы в OuterClassе и его предках.



Может быть наследован:



— таким же внутренним классом в OuterClassе и его наследниках.



Может имплементировать интерфейс



Может содержать:



— только обычные свойства и методы (не статические).



Экзэмпляр этого класса создаётся так:



OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();




Статический вложенный класс (StaticInnerClass)



public class OuterClass {
    public static class StaticInnerClass{
    }
}


Из него видны:



— статические свойства и методы OuterClassа (даже private).

— статические свойства и методы родителя OuterClassа public и protected. То есть те, которые видны в OuterClassе.



Его видно:



— согласно модификатору доступа.



Может наследовать:



— обычные классы.

— такие же статические внутренние классы в OuterClassе и его предках.



Может быть наследован:



— любым классом:

— вложенным

— не вложенным

— статическим

не статическим!



Может имплементировать интерфейс



Может содержать:



— статические свойства и методы.

— не статические свойства и методы.



Экзэмпляр этого класса создаётся так:



OuterClass.StaticInnerClass staticInnerClass = new OuterClass.StaticInnerClass();


Локальный класс (LocalClass)



public class OuterClass {
    public void someMethod(){
        class LocalClass{
        }
    }
}


Из него видны:



— все (даже private) свойства и методы OuterClassа обычные и статические.

— public и protected свойства и методы родителя OuterClassа обычные и статические. То есть те, которые видны в OuterClassе.



Его видно:



— только в том методе где он определён.



Может наследовать:



— обычные классы.

— внутренние классы в OuterClassе и его предках.

— такие же локальные классы определённые в том же методе.



Может быть наследован:



— таким же локальным классом определённом в том же методе.



Может имплементировать интерфейс



Может содержать:



— только обычные свойства и методы (не статические).



Анонимный класс (имени нет)



Локальный класс без имени. Наследует какой-то класс, или имплиментирует какой-то интерфейс.



public class OuterClass {
    public void someMethod(){
        Callable callable = new Callable() {
            @Override
            public Object call() throws Exception {
                return null;
            }
        };
    }
}


Из него видны:



— все (даже private) свойства и методы OuterClassа обычные и статические.

— public и protected свойства и методы родителя OuterClassа обычные и статические. То есть те, которые видны в OuterClassе.



Его видно:



— только в том методе где он определён.



Не может быть наследован



Может содержать:



— только обычные свойства и методы (не статические).



На этом всё. Жду ваших комментариев: какие есть неточности и ошибки, что я не покрыл и т.п.

Надеюсь, статья будет многим полезна.

Источник: Хабрахабр

Категория: Программирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent