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

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

Внутренний, или вложенный класс (англ. inner class) — в объектно-ориентированном программировании класс, целиком определённый внутри другого класса.

Вложенные классы поддерживаются в языке программирования Java, начиная с версии 1.1, С# и других языках на платформе .NET, а также в языке программирования D и в C++.

Содержание

Обзор

Экземпляр обычного класса может существовать сам по себе. В отличие от него, экземпляр внутреннего класса не может существовать без привязки к включающему его классу верхнего уровня.

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

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

Статические внутренние классы

Декларируются внутри основного класса и обозначаются ключевым словом static. Не имеют доступа к членам внешнего класса за исключением статических. Может содержать статические поля, методы и классы, в отличие от других типов внутренних классов. Пример:

class OuterClass() 
{
   public OuterClass() {}
   private int outerField;
   static int staticOuterField;
   static class InnerClass
   {
      int getOuterField()
      {
         return OuterClass.this.outerField; // Эта линия кода образует ошибку при компиляции
      }
      int getStaticOuterField()
      {
         return OuterClass.staticOuterField; // Эта линия кода синтаксически корректна
      }
   }
}

Внутренние классы

Декларируются внутри основного класса. В отличие от статических внутренних классов, имеют доступ к членам внешнего класса. Не могут содержать определение (но могут наследовать) статических полей, методов и классов (кроме констант). Пример:

class OuterClass(){
 
   public OuterClass(){}
 
   private int outerField;
 
   class InnerClass{
 
         int getOuterField(){
             return OuterClass.this.outerField; // Эта линия кода синтаксически корректна
         }
 
    };
};

Локальные классы

Декларируются внутри методов основного класса. Могут быть использованы только внутри этих методов. Имеют доступ к членам внешнего класса. Имеют доступ как к локальным переменным, так и к параметрам метода при одном условии - переменные и параметры используемые локальным классом должны быть задекларированы final. Не могут содержать определение (но могут наследовать) статических полей, методов и классов (кроме констант). Пример:

class OuterClass()
{
   public OuterClass(){}
   private int outerField;
   InnerClass inner; // Эта линия кода образует ошибку при компиляции
   void methodWithLocalClass (final int parameter)
   {
      InnerClass innerInsideMehod; // Эта линия кода синтаксически корректна
      int notFinal = 0;
      class InnerClass
      {
         int getOuterField()
         {
            return OuterClass.this.outerField; // Эта линия кода синтаксически корректна
         }
         notFinal++; // Эта линия кода образует ошибку при компиляции
         int getParameter()
         {
            return parameter; // Эта линия кода синтаксически корректна
         }
      };
   }
};

Анонимные (безымянные) классы

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

class OuterClass()
{
   public OuterClass() {}
   void methodWithLocalClass (final int interval)
   {
      // При определении анонимного класса применен полиморфизм - переменная listener 
      // содержит экземпляр анонимного класса, реализующего существующий 
      // интерфейс ActionListener
      ActionListener listener = new ActionListener()
      {
         public void actionPerformed(ActionEvent event)
         {
            System.out.println("Эта строка выводится на экран каждые " + interval + " секунд");
         }  
      };
 
      Timer t = new Timer(interval, listener); // Объект анонимного класса использован внутри метода
      t.start();
   }
}

См. также

Литература

Cay S. Horstmann and Gary Cornell, Core Java, eighth edition (Volume I). Prentice Hall, 2003. ISBN 978-0132354769 (ссылка на страницу книги)

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Внутренний класс" в других словарях:

  • КЛАСС ИНФУЗОРИИ (INFUSORIA или CILIATA) —          Простейшие этого обширного по количеству видов около 6 тыс. класса широко распространены в природе. (Эта цифра приводится в сводке Корлисса, 1961 г.). К ним относятся многочисленные обитатели морских и пресных вод. Некоторые виды… …   Биологическая энциклопедия

  • Класс (Java) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… …   Википедия

  • Класс (ООП) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… …   Википедия

  • Класс (объектно-ориентированное программирование) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… …   Википедия

  • Класс объекта — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… …   Википедия

  • КЛАСС МОРСКИЕ ЗВЕЗДЫ (ASTERDEA) —          Название класса Asteroidea (морские звезды) происходит от формы тела объединяемых в этом классе представителей иглокожих, имеющих вид звезды, чаще всего пятиконечной, или плоского правильного пятиугольника.         Среди животных,… …   Биологическая энциклопедия

  • КЛАСС НЕМАТОДЫ или КРУГЛЫЕ ЧЕРВИ (NEMATODA) —          Если бы тип немательминтов был ограничен только рассмотренными выше классами животных, то едва ли была бы построена та общая характеристика этого типа, которая возникла в современной науке. Кроме того, его значение и в экономике природы …   Биологическая энциклопедия

  • КЛАСС ГОЛОВОНОГИЕ (CEPHALOPODA) —          Головоногие самые необычные, крупные, хищные и самые совершенные из моллюсков. Головоногие достигли высокой степени развития. Это своего рода приматы среди беспозвоночных обитателей моря.         Внешне, на первый взгляд, головоногие… …   Биологическая энциклопедия

  • КЛАСС СУМЧАТЫЕ ГРИБЫ ИЛИ АСКОМИЦЕТЫ (ASCOMYCETES) —         Сумчатые грибы, или аскомицеты, один из крупнейших классов грибов. В нем более 30 000 видов, что составляет около 30% всех известных видов грибов. Входящие в этот класс грибы чрезвычайно разнообразны по строению. Сюда относятся, например …   Биологическая энциклопедия

  • КЛАСС ГИНКГОВЫЕ ИЛИ ГИНКГОПСИДЫ (GINKGOOPSDA) —         Единственным современным представителем класса гинкговых является реликтовое растение гинкго двулопастный (Ginkgo biloba). Оно было открыто для науки в 1690 г. в Японии врачом голландского посольства Е. Кемпфером и в 1712 г. описано им же …   Биологическая энциклопедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»