Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Статические внутренние классы (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
|