4.4 Интерфейс
Наследование определяет очень важную роль в экономии времени и энергии программистов, многократно использующих существующий код. Большинство реальных программ жизни использует понятие, названное
множественным наследованием. При множественном наследовании, мы можем унаследовать методы и свойства от нескольких различных классов. Java не поддерживает множественное наследование. Однако, увидев важность множественного наследования, Java вводит понятие
интерфейса.
4.4.1 Определение интерфейса
Понятие интерфейса - одна из главных особенностей в Java. Интерфейс позволяет классу обойти наследование от одного предка. Программы Java одновременно могут унаследовать один класс, но могут осуществить несколько интерфейсов. Интерфейс не может иметь никаких конкретных методов. Интерфейсы также используются, чтобы определить набор констант, которые могут использоваться классами. Короче говоря, интерфейс - шаблон поведения (в форме методов), который должны осуществить другие классы. Это означает, что мы имеем пустое тело метода.
Интерфейс очень похож на определение класса. Вот общая форма интерфейса:
access interface name{
return-type method-name1(parameter-list);
return-type method-name2(parameter-list);
type final-varnamel = value;
type final-varname2 = value;
// ..
return-type method-nameN(parameter-list);
type final-varnameN = value;
}
Здесь доступ осуществляется с помощью
public или вообще не используется. Когда не используется никакой спецификатор доступа, то применяется доступ по умолчанию и интерфейс доступен только другим членам пакета, в котором он объявлен.
Когда интерфейс объявляется как
public, то он может использоваться любым другим кодом,
name - имя интерфейса, и может быть любым допустимым идентификатором. Заметьте, что объявленные методы пустые. Они заканчивают точкой с запятой после списка параметров. Они, по существу, являются абстрактными методами; не может быть никакого заданного по умолчанию выполнения любого метода, указанного в пределах интерфейса. Каждый класс, который включает интерфейс, должен осуществлять все методы.
Переменные могут быть объявлены в объявлении интерфейса. Они являются неявно
final и
static, означая, что они не могут быть изменены наследующим классом. Они должны также быть инициализированы с постоянным значением.
4.4.2 Использование интерфейса
Рассмотрим шаги для создания интерфейса:
Интерфейс определяется следующим способом:
// interface with methods public interface Mylnterface
{
public void add(int x, int y);
public void volume(int x,int y, int z);
}
// interface to define constants used by a program
public interface MyConstants
{
public static final double price = 1450.00;
public static final int counter = 5;
}
Это компилируется следующим способом:
javac Mylnterfасе.Java
Интерфейс осуществляется с помощью ключевого слова 'implements'. Например:
class Demo implements Mylnterface
В случае, если есть более чем один осуществлённый интерфейс, названия отделяются с помощью запятых. Например,
class Demo implements Mycalc, Mycount
Рассмотрим следующие пункты, которые надо знать при создании интерфейса:
Все методы в интерфейсах должны иметь тип public.
Методы должны быть определены в классе, который осуществляет этот интерфейс.
Если мы реализуем новый интерфейс, который расширяет старый интерфейс, то мы должны отменить методы в новом интерфейсе, так же как и в старом.
Пример 6:
public interface Mylnterface
{
public void add(int x,int y) ;
public void volume(int x, int у , int z)
}
Мы сохраняем вышеупомянутый код как файл ''Mylnterface.java". Мы компилируем файл следующим способом:
javac -d c: Java MyInterface.java
Когда вышеупомянутая команда выполнена, файл ".class"
Mylnterface помещается в папку
Java. Если папка уже существует, то файл записывается поверх нового файла
"MyInterface.class" в текущей папке.
Интерфейсы не могут расширять классы, но могут расширять другие интерфейсы. Если мы осуществляем интерфейс, который расширяет другой интерфейс, мы должны отменить методы в новом интерфейсе так же как и в старом. В вышеупомянутом примере, методы были только что объявлены и не определены. Эти методы должны быть определены в классе, который осуществляет этот интерфейс. Мы должны определить поведение метода. Все методы в интерфейсах должны иметь тип public. При объявлении методов в интерфейсе, недопускается использовать любые другие стандартные модификаторы, типа protected, private и т.д.,
Следующий пример показывает реализацию интерфейса.
Пример 7:
import java.io.*;
class Demo implements Mylnterface
{
public void add(int x, int y)
{
System.out.println( +(x+y));
}
public void volume(int x, int y, int z)
{
System.out.println( +(x*y*z));
}
public static void main(String args[])
{
Demo d= new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
Откомпилируйте код с помощью следующей команды.
Javac classpath c:Java Demo.Java
Вывод вышеупомянутой программы показан ниже:
Рисунок 4.6: Вывод