Что такое внутренний класс в 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 можно создать двумя способами:
- Использование класса
- Использование интерфейса
Анонимный внутренний класс в примере 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 имеют одинаковый эффект.