Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Статические внутренние классы (nested)






    В объекте обычно внутреннего класса есть ссылка на объект внешнего класса.

    Поэтому мы создаем: obj.newInner();

    У статического такой ссылки нет.

    Поэтому:

    - для его создания не нужен объект внешнего класса.

    - из объекта статического внутреннего класса нельзя обращаться к нестатическим членам внешнего (а только к статическим).

    - у нестатических внешних классов не может быть статических членов. У статических – могут.

     

    class Outer2 {

    static class Inner2{}

    public static Inner2 createInner() { return new Inner2(); }

    }

     

    Извне

    Outer2.Inner2 obj1 = new Outer2.Inner2; //похоже на пакет

    Outer2.Inner2 obj2 = new Outer2.createInner(); // порождение через метод

     

    Пример: в библиотеке Java2D есть класс Rectangle2D – абстрактный. В нем есть 2 конкретных подкласса:

    - внутренние статические;

    - наследники внешнего.

     

    Rectangle 2D.Float

    Rectangle 2D.Double

     

    Создание:

     

    Rectangle2D.Double d = new Rectangle2D.Double (10.0, 25.0, 22.5, 20.0);

     

    А можно сделать upcasting

     

    Rectangle2D d = new Rectangle2D.Double (10.0, 25.0, 22.5, 20.0);

     

    Пример применения внутренних классов: говорящие часы:

     

    import java.awt.*;

    import java.awt.event.*;

    import java.util.*;

    import javax.swing.*;

    import javax.swing.Timer;

     

    class TalkingClock{

    private int interval;

    private boolean beep;

     

    public TalkingClock (int interval, boolean beep){

    this.interval = interval;

    this.beep = beep;

    }

    _________________________________________________________________________

     

    private class TimePrinter implements ActionListener {

    public void actionPerformed (ActionEvent event) {

    Date now = new Date ();

    System.out.println (“The time is ” + now);

    if (beep) Toolkit.getDefaultToolkit().beep();

    }

    }

    ________________________________________________________________________

     

    public void go (){

    ActionListener listener = new TimePrinter ();

    Timer t = new Timer (interval, listener);

    t.start ();

    }

    }

    ________________________________________________________________

     

    public class TalkingClockTest {

    public static void main (String [] args) {

    TalkingClock clock = new TalkingClock (200, true);

    clock.go ();

    JoptionPane.showMessageDialog (null, “Quit? ”);

    System.exit (0);

    }

    }

     

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

     

    import java.awt.*;

    import java.awt.event.*;

    import java.util.*;

    import javax.swing.*;

    import javax.swing.Timer;

     

    class TalkinClock {

    public void go(int interval, final boolean beep){

    ActionListener listener = new

    ActionListener(){

    public void ActionPerformed(ActionEvent event) {

    Date now = new Date();

    System.out.println(“The time is” + now);

    if (beep) Tookit.getDefaultToolkit().beep();

    }

    };

    Timer t = new Timer(interval, listener);

    t.start;

    }//go()

    }

     

    public class AnonymusTalkingClockTest {

    public static void main (String [] args) {

    TalkingClock clock = new TalkingClock();

    clock.go (1000, true);

    JoptionPane.showMessageDialog(null, “Quit? ”);

    System.exit (0);

    }

    }

     

    Тема 11






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.