![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Вложенные классы (Inner)
Можно создавать классы внутри других классов – вложенные классы. Они могут работать со всеми членами внешнего класса. Пример 1. В класс Outer помещено два класса Inner1, Inner2
public class Outer { int y; Outer (int x) {// конструктор y=x; }
class Inner1 {… public int f1() {return y++; } } //внутренний класс
int g (String s) { // метод class Inner 2 {…}// локальный внутренний класс } } Компилятор сделает файлы: Outer.class Outer$Inner1.class Outer$Inner2.class
Порождение объекта внутри класса Outer: Inner1 i1 = new Inner1 ();
Порождение снаружи: Outer t1 = new Outer (); Outer.Inner1 i2 = t1. new Inner1(); // t1 -объект класса Outer Пример 2. public class Parcel1{ void f() {} _________________________________________________________________________
class Contents { private int i =11; public int value () {return i; } public Parsel1 outer(){ return Parsel1.this; }//синтаксис!!! } //ссылка на внешний класс ___________________________________________________________________________
class Destination {//пакетный доступ, может быть и private-тогда снаружи //нельзя создать объект private String label;
Destination (String whereTo) {// конструктор label = where To; } String readLabel () {return label; } } ______________________________________________________________________________
public void ship (String dest) { Contents c = new Contents (); //создаем объекты внутренних //внутри внешних Destination d = new Destination (dest);
System.out.println (d.readLabel()); //используется метод //внутреннего класса. }
public Contents cont () {return new Contents (); }//создаем объект //внутреннего класса public static void main (String [] args) {
Parcel1 p = new Parcel1 (); p.ship (“Тасмания”);
Parcel1 q = new Parcel1(); Parcel1.Contents c = q.cont(); //имя внутреннего класса Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Parcel1.Destination d = p.new Destination (“Танзания”); c.outer().f(); } }// Тасмания
Внутренний класс содержит скрытую ссылку на внешний. Объект внутреннего класса можно создать только в сочетании с объектом внешнего.
Внутренний класс получает доступ к членам внешнего класса.
interface Selector { //для перебора элементов массива (итератор) boolean end(); // достигнут ли конец последовательности? Object current(); // обратиться к текущему объекту void next(); // перейти к следующему объекту }
public class Sequence { //оболочка для массива Object с размером size private Object[] items; private int next = 0;
public Sequence(int size){ items = new Object[size]; }//конструктор
public void add(Оbject x) { // добавление новых объектов к массиву if (next < items.lenght) items[next++] = x; }
private class SequenceSelector implements Selector { //закрытый //класс, реализующий Selector private int i = 0; // поле внутреннего класса public boolean end() {return i == items. length; }//работаем с //закрытым полем внешнего класса public void next() { if(i < items. length) i++; } }
public Selector getSelector() {//вернем Selector!!!!! return new SequenceSelector(); }
public static void main(String[] args) { Sequence sequence = new Sequence(10); for (int i=0; i< 10; i++) Sequence.add(Integer.toString(i)); // создание //последовательности с заполнением String Selector selector = sequence.getSelector(); // получили ссылку на // Selector while (! selector.end()){//передвигаемся по последовательности System.out.print(selector.current() + “ ”); selector.next(); }// while }// main }//class //0 1 2 3 4 5 6 7 8 9
Внутренний класс может обращаться ко всем полям и методам внешнего. Зачем нужны внутренние классы ??? Обычно внутренний класс реализует интерфейс или наследует от какого – либо класса. А его код имеет доступ к членам внешнего класса. Почему не реализовать интерфейс внешним классом? 1) Проектирование. Внутренний класс не обязан реализовывать отношение is – a. (Sequence не является Selector). Кроме того, можно создать еще один внутренний класс Selector, для перебора, например, в обратном направлении (метод reverceSelector () его вернет). Это дает гибкость-несколько внутренних классов, реализующих один интерфейс. 2) Можно наследовать от нескольких классов: внешний класс от одного, внутренний – от другого (множественное наследование реализации). То есть наследование от многих не интерфейсов, а классов. Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:— Разгрузит мастера, специалиста или компанию; — Позволит гибко управлять расписанием и загрузкой; — Разошлет оповещения о новых услугах или акциях; — Позволит принять оплату на карту/кошелек/счет; — Позволит записываться на групповые и персональные посещения; — Поможет получить от клиента отзывы о визите к вам; — Включает в себя сервис чаевых. Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе 3) Можно создать несколько экземпляров внутреннего класса (Selector), которые будут работать одновременно.
|