Что такое внутренний класс в Java?

Опубликовано: 2022-04-29

Концепция внутреннего класса в Java является фундаментальной для программирования на Java. В Java вложенный класс и внутренний класс — это две очень похожие, но несколько разные идеи проектирования классов, которые часто идут рука об руку.

Вложенный класс определяется внутри другого класса и имеет два типа — статический вложенный класс и нестатический вложенный класс. С другой стороны, внутренний класс — это тип нестатического вложенного класса, а также еще три типа — внутренний класс-член, анонимный внутренний класс и локальный внутренний класс.

Итак, что же означают эти три типа внутренних классов и для чего они нужны? Читайте дальше, чтобы узнать это в этом подробном руководстве по внутреннему классу Java.

Оглавление

Значение внутреннего класса в Java

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

Источник

Типы внутреннего класса в Java

В Java внутренние классы бывают следующих трех типов:

  • Внутренний класс члена
  • Анонимный внутренний класс
  • Локальный внутренний класс

Теперь давайте разберемся с каждым типом внутреннего класса на примерах.

1. Внутренний класс члена

Внутренний класс-член в Java — это нестатический вложенный класс, созданный внутри класса, но вне метода. Также называемый обычным внутренним классом, внутренний класс-член может быть объявлен с модификаторами доступа, такими как private, public, default и protected.

Синтаксис внутреннего класса члена следующий:

внешний класс {

//код

класс внутренний {

//код

}

}

Внутренний класс члена в примере Java:

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

класс DemoOuter {

целое число;

// внутренний класс

частный класс DemoInner {

публичная недействительная печать () {

System.out.println("Это внутренний класс");

}

}

// Доступ к внутреннему классу из метода внутри

недействительным display_Inner () {

DemoInner внутренний = новый DemoInner();

внутренний.принт();

}

}

открытый класс MyClass {

public static void main(String args[]) {

// Создание внешнего класса

Внешний DemoOuter = новый DemoOuter();

// Доступ к методу display_Inner()

внешний.display_Inner();

}

}

Вывод: это внутренний класс

В приведенном выше примере OuterDemo — это внешний класс, InnerDemo — внутренний класс, мы создаем экземпляр внутреннего класса внутри метода display_Inner(), который вызывается из основного метода.

Изучите наши популярные курсы по программной инженерии

Сл. Нет Программы разработки программного обеспечения
1 Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
2 Учебный курс по полной разработке стека Программа PG в блокчейне
3 Программа Executive Post Graduate Program в области разработки программного обеспечения - специализация в DevOps Просмотреть все курсы по программной инженерии

2. Анонимный внутренний класс

Анонимный внутренний класс в Java — это внутренний класс, объявленный без какого-либо имени класса и для которого создается только один объект. Анонимные внутренние классы в Java объявляются и создаются одновременно. Они наиболее ценны, когда мы хотим переопределить метод класса или интерфейса.

Синтаксис анонимного внутреннего класса в Java следующий:

AnonymousInner an_inner = новый AnonymousInner() {

общественный недействительным my_method () {

//код

}

};

Анонимный внутренний класс в Java можно создать двумя способами:

  1. Использование класса
  2. Использование интерфейса

Анонимный внутренний класс в примере Java (с использованием класса):

еда абстрактного класса{

абстрактная пустота есть();

}

класс TestAnonymousInner{

public static void main (String args []) {

Еда m=новая еда(){

void eat(){System.out.println("Приятного аппетита!");}

};

мясо();

}

}

Вывод: Приятного аппетита!

Анонимный внутренний класс в примере Java (с использованием интерфейса):

интерфейс игры{

недействительная игра();

}

класс TestAnnonymousInner1 {

public static void main (String args []) {

Игра g=новая игра(){

public void play(){System.out.println("Игры на открытом воздухе");}

};

г.играть();

}

}

Выход: Подвижные игры

3. Локальный внутренний класс

Локальный внутренний класс в Java — это класс, созданный внутри метода. Как и в случае с локальными переменными, область действия локального внутреннего класса остается ограниченной внутри метода.

Локальные внутренние классы определяются внутри блока: тело метода, предложение if или цикл for. Локальный внутренний класс не является членом какого-либо охватывающего класса, а вместо этого принадлежит блоку, в котором он определен. Таким образом, хотя локальный внутренний класс в Java не может иметь никаких модификаторов доступа, связанных с ним, вы можете пометить его как абстрактный или окончательный. Если мы хотим вызвать методы локального внутреннего класса, мы должны создать экземпляр класса внутри метода.

Локальный внутренний класс в примере Java:

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

пакет внутренний класс;

открытый класс Outer_Class

{

// Метод экземпляра класса Outer_Class.

публичный пустой дисплей ()

{

// Объявление метода локального внутреннего класса.

класс Внутренний_класс

{

общественное недействительное сообщение () {

System.out.println("Это локальный внутренний класс!");

}

}

// Создаем экземпляр локального внутреннего класса метода и вызываем метод msg(), используя переменную ссылки на объект i.

Внутренний_Класс i = новый Внутренний_Класс();

i.msg();

}

public static void main (аргументы String [])

{

// Создаем объект внешнего класса Outer_Class.

Внешний_класс o = новый внешний_класс();

о.дисплей();

}

}

Вывод: это локальный внутренний класс!

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

Преимущества внутреннего класса Java

Внутренний класс в Java предоставляет три важные утилиты. Вот они:

1. Поскольку внутренний класс Java может обращаться к элементам данных и методам внешнего/основного класса, включая частные, он представляет собой особый тип отношений.

2. Внутренний класс Java значительно сокращает кодирование, так как требует меньше написания.

3. Внутренний класс в Java логически группирует классы и интерфейсы в одном месте, тем самым повышая читабельность кода и упрощая его обслуживание.

Подводя итоги

Концепция вложенных классов упрощает и добавляет гибкости при создании классов в любом месте программирования на Java. В этом отношении нестатический вложенный класс, известный как внутренний класс, особенно полезен, как мы уже видели в нашем обсуждении.

Мы хотели бы завершить, указав два случая, когда использование внутреннего класса кажется наиболее подходящим. Во-первых, внутренний класс Java идеален, когда два класса тесно связаны и недоступны никакому другому классу. И, во-вторых, внутренние классы являются обычным явлением в обработке событий программирования Java GUI. Следовательно, внутренние классы Java можно безопасно использовать там, где задействованы слушатели и их компоненты графического интерфейса.

Не знаете, где выучить Java?

Сертификация PG upGrad, связанная с работой, в области разработки программного обеспечения это то, что вы ищете!

Сертификация PG в области разработки программного обеспечения, связанная с работой, специально разработанная для выпускников и последних курсов upGrad, идеально подходит для тех, кто хочет научиться программировать и получить работу в программном обеспечении начального уровня. Эта 5-месячная онлайн-программа научит лучшим навыкам работы с программным обеспечением, таким как Java, JavaScript, HTML5, DSA, AWS, MERN и многим другим!

Основные моменты программы:

  • Специализация в MERN Stack/Cloud-Native
  • 500+ часов онлайн-обучения
  • 350+ часов практических занятий
  • 50+ живых сессий
  • Пять отраслевых проектов
  • Нетворкинг с экспертами отрасли
  • Форумы вопросов и ответов с коллегами и отраслевыми экспертами
  • Поддержка обучения от ассистентов преподавателей и отраслевых наставников

Зарегистрируйтесь сегодня , чтобы учиться у лучших в отрасли!

В чем разница между внутренним классом и подклассом?

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

Можем ли мы написать класс внутри класса в Java?

Да, мы можем определить класс внутри другого класса в Java. Такой класс известен как вложенный класс, и он позволяет нам логически организовывать классы в одном месте, тем самым создавая более удобный и читаемый код. Как часть окружающего его класса, вложенный класс может быть объявлен общедоступным, закрытым, пакетно-приватным или защищенным.

Может ли внутренний класс Java быть закрытым?

Да, внутренний класс Java может быть закрытым. Но как только внутренний класс объявлен закрытым, доступ к нему из объекта, находящегося вне класса, становится невозможен. Внутренние и внешние классы имеют доступ к закрытым переменным экземпляра и закрытым методам друг друга. Пока мы находимся внутри внешнего или внутреннего класса, модификаторы private и public имеют одинаковый эффект.