Материал: 3

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Интерфейс используется для создания набора методов, что класс будет реализовать.

Интерфейсы

public interface Doable

{

public void doThis(); public int doThat();

public void doThis2 (float value, char ch); public boolean doTheOther (int num);

}

Interface - служебное слово. Ни один из методов. Интерфейс не имеет определения (тела). Точку с запятой следует за каждым каждым заголовком метода. Интерфейс не может быть инстанцирован (создан его экземпляр, хотя он класс). Методы в интерфейсе имеют модификатор public по умолчанию.

Класс формально реализует интерфейс:

•Заявив заявив об этом, поэтому в заголовке класса написано

implements.

•И обеспечивая реализацию каждого абстрактного метода в интерфейсе.

Если класс утверждает, что он реализует интерфейс, то он должен определить все методы в интерфейсе (создать их реализацию – тело).

Класс, который реализует интерфейс может реализовать другие методы, а также несколько интерфейсов. В дополнение к (или вместо) абстрактных методов, интерфейс может содержать константы. Когда класс реализует интерфейс, он получает доступ ко всем его константам.

Класс может реализовать несколько интерфейсов. Интерфейсы перечисляются в списке, который следует за implements через запятую. Класс должен реализовывать все методы всех интерфейсов, перечисленных в заголовке.

class ManyThings implements interface1, interface2

{

// all methods of both interfaces

}

Библиотека стандартных классов Java содержит много полезных интерфейсов. Интерфейс Comparable одержит один абстрактный метод, называемый compareTo, которая используется для сравнивать два объекта. Мы обсудим этот метод compareTo() при обсуждении класса String. Класс String реализует интерфейс Comparable, это дает нам возможность поставить строки в лексикографическом порядке.

Интерфейсные ссылки и наследование

Предположим, что два класса, Philosopher и Student, оба реализуют интерфейс Speaker у которого есть метод speak() , таким образом обеспечивая предоставление различных версий метода speak().

В следующем коде, первый вызов speak вызывает одну версию, а второй вызывает другую версию:

Speaker guest = new Philospher(); guest.speak();

guest = new Student(); guest.speak();

Имя интерфейса Speaker может быть использовано как тип ссылочной переменной объекта current. Ссылка current ссылка может быть использована, чтобы ссылаться на объект любого класса, который реализует интерфейс

Speaker. Версия метода speak() что следующая строка вызывает зависимость от типа объекта, который является ссылкой на current.

current.speak();

Графические приложения

Все примеры программ, которые мы рассмотрели с вами до этого момента были на основе текстового вывода. Они называются приложениями командной строки, которые взаимодействуют с пользователем с помощью простых текстовых подсказок. Давайте рассмотрим некоторые Javaприложения, в которых используются графические компоненты. Эти компоненты будут служить основой для программ, которые представляют настоящие графические интерфейсы пользователя (GUIs).

Иерархия наследования

Наследование – это цепочка классов, несколько уровней иерархии.

Компоненты GUI

Компонент GUI это объект, который представляет собой элементы представленные на экране, такие как кнопки или текстовые поля и т.п. Связанные с GUI классы определяются в первую очередь в пакете java.awt и в javax.swing packages. Классы относящиеся к пакету Abstract Windowing Toolkit

(AWT) были первоначальным пакетом для GUI в Java. Пакет Java, который называется Swing появился позже и обеспечивает дополнительные и более универсальные компоненты. Оба пакета необходимы для создания GUI программ Java.

Контейнеры GUI

GUI контейнер представляет собой компонент, который используется для хранения и организации работы с другими компонентами.

frame (фрейм) является контейнером, который используется для отображения, основанного на GUI Java приложения.

Элемент фрейм отображается как отдельное окно с заголовком - он может быть перемещен и изменен на экране по мере необходимости.

Элемент panel является контейнером, который не может быть отображен в одиночку, но используется для организации других компонентов.

Панель должна быть добавлена к другому контейнеру, который будет отображаться.

Элемент Label

Элемент label это GUI компонент, который отображает строку текста (обычно название), называют еще этикеткой. Этикетки обычно используются для отображения информации или чтобы идентифицировать другие компоненты в интерфейсе. Давайте посмотрим на программу, которая организует две этикетки на одной панели и отображает эту панель во фрейме. Вообще-то эта программа не является интерактивной, но зато фрейм можно перемещать и изменять его размер.

Пример MeetUp.java

import java.awt.*; import javax.swing.*;

public class MeetUp {

public static void main (String[] args)

{

JFrame frame = new JFrame ("MeetUp"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

JPanel primary = new JPanel(); primary.setBackground (Color.lightGray);

primary.setPreferredSize (new Dimension(250, 75)); JLabel label1 = new JLabel ("You have a Question?"); JLabel label2 = new JLabel ("raise your hand first.");

primary.add (label1); primary.add (label2);

frame.getContentPane().add(primary); frame.pack(); frame.setVisible(true);

}

Вложенные панели

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

ThreePanels.java

import java.awt.*; import javax.swing.*;

public class ThreePanels {

public static void main (String[] args) { JFrame frame = new JFrame (

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// Создаем первую подпанель

JPanel subPanel1 = new JPanel(); subPanel1.setPreferredSize (new Dimension(150, 100)); subPanel1.setBackground (Color.green);

JLabel label1 = new JLabel ("One"); subPanel1.add (label1);

Источник: https://studfile.net/preview/16403757/