Большинство классов определяют мет оды, которые реагируют на различныедействия,например , отвечунанажатиекнопки , отвечуна движение мыши , и так далее. Набор таких действий называется
поведениемкласса .
Интерфейсы – это специальные конструкции, которые только объявляют набор определенных действий без кода, который описывает,чтоименнонадоделать вобъявленныхметодах ,например:
Как вид ите, методы mouseDragged() и mouseMoved() не содержат никакого текста программ – эти методы просто объявлены в интерфейсе, называемом MouseMotionListener. А вот если ваш класс должен реагировать на движение указателя мыши или на перетаскивание мышью, то тогда он должен реализовать этот интерфейс.
Слово implements означает, что этот класс совершенно точно будет содержать методы, которые могли быть объявлены в интерфейсе, например:
Прогрнаммирование
Java длядетей,родителей,бабушекдедушек
importjava.awt.event.MouseMotionListener;
class
MyDrawingPad implements MouseMotionListener{
//здесь
можетидти
текстпрограммы,которая
// выполняетфункцииграфредактческогора
mouseDragged(MouseEvent e){
// здесьбудет
текстпрограммы,когда
//мышьчто
-топеретаскивает
}
mouseMoved(MouseEvent e){
// сюидает
текстпрограммы,когда
двигается
//мышьпросто
будетздесь
}
}
Должно быть, вам интересно, зачем беспокоиться о создании интерфейсов без текста программы? Причина в том, что интерфейс,
сделанный однажды,
может и спользоваться во многих классах.
Например, к огда другие классы (или сама виртуальная машина JVM)
MouseMotionListener
реализует интерфейс
видят, что класс
MyDrawingPad
mouseMoved().
методы
mouseDragged(),они знают, что в этом классе точно есть
и
Каждый раз,когдапользовательдв игаетмышкой, JVM вызываетметод mouseMoved() и исполняет текст программы, который вы там написали. Представьте, что если Иван решит назвать этот метод mouseMoved(), Маша назовет его movedMouse(), а Петя предпочтет mouseCrawling()? Тогда JVM запутается и не будет знать, какой же методвашегоклассавызвать,чтобыс ообщитьодвижениимыши.
Класс Java может реализовывать много интерфейсов, например , он можетреагироватьнадвижениямышиинанажатиекнопки:
Давайтевернемсякнашемукалькулятору.Есливысделализаданияк предыдущей главе, визуальная часть программы готова. Теперь мы создадим еще один класс слушатель, который будет что то делать, когдапользовательбудетнажиматьнаоднуизкнопок.Вообще то,мы могли бы добавить текст программы, обрабатывающий события нажатиянакнопку,ср азувкласс Calculator.java, но лучшенесмешивать водномклассе визуальнуюиобрабатывающуючасти.
Назовем второй класс CalculatorEngine, и скажем, что он должен реализовать интерфейс java.awt.ActionListener в котором объявлен толь ко один метод actionPerformed(ActionEvent).
JVM вызываетэто т методвклассе,которыйреализуетэтотинтерфейс каждыйраз,когдакто тонажимаетнакнопку.
Посмотримна этотпростойкласс:
importjava.awt.event.ActionListener;
public classCalculatorEngineimplementsActionListener {
}
Есливыпопытаетесь его скомпилировать (илипростосохр анитьегов Eclipse), то возникнет сообщение о б ошибке, что, мол, класс должен реализовать метод actionPerformed(ActionEvent e). Давайте исправимэтуошибку: