
Объявление интерфейса
public interface My_int {
static final string str = «Тест интерфейса»;
string str1 = «Проба»
public int My_met (int switch);
}
//Реализация абстрактных методов интерфейса в классе
сlass TestInt implements My_int
{public int My_met (int switch)
{if (switch= = 0 ) return ( 0 )
else
return (switch*switch)}
public void f1 ( ) {…….}}
При переопределении методов можно использовать модификаторы native (метод, реализованный на другом языке программирования) или abstract, указывающий, что данный метод не реализуется, а просто объявляется в классе.
Если метод объявленный в классе использует иной список параметров, чем в интерфейсе, то реализуется перегрузка, а не переопределение метода, т.е. для переопределения должны полностью совпадать сигнатуры методов.
Если реализуемый класс не является абстрактным классом, то в классе необходимо определить тело каждого объявленного в наследуемых интерфейсах метода.
Интерфейс после его реализации можно использовать в качестве типа данных, т.е. переменную интерфейса можно описывать так же , как и любую переменную класса, реализующего этот интерфейс.
Пример использования.
Пример, демонстрирующий преимущества использования интерфейсов:
Рассмотрим пример представления товаров в зоомагазине, в котором, например, попугай является одновременно и птицей и товаром, как и другие продаваеиые объекты. Представим модели возможной реализации:
Слева представлена модель, в которой попугай является реализуемым товаром магазина – класс Tparrot (слева, через базовый класс Tbird и интерфейс Product, справа используются только классы – линные цепочки неэффективных наследований:
public class Tbird {// общее действие для //всех птиц, методы //с реализацией public void feed ( ) {………..}; …..
|
public interface Product // описание интерфейса без реализации методов //определение цены на товар { public void setPrice (float thePrice); // продажа 1 единицы товара public void sell ( ); Public void buy(short theQuatity, float theWholeSalePrice); }
|
// Реализация интерфейсов в объявлении класса.
public class Tparrot extends Tbird imlement Product
{private final float KDailyFoodPrice = 0.60;
static short fPrice;
static float fAccjount;
short final fInvetory;
//определение цены на товар
public void setPrice (float thePrice)
{fPrice = thePrice; }
//метод, фиксирующий изменения при продаже птицы
public void sell ( )
{fInventory--; // удаление 1 птицы из общего остатка на складе;
fAcoonnt +=fPrice; // добавление ее стоимости на приходный счет
}
//метод, фиксирующий изменения при покупке птицы
public void buy(short theQuality, float theWholeSalePrice)
{fIwentory+= theQuality; // добавление количества закуп. птиц к общему //остатку
fAccount= theQuality * the WholeSalePrice;} //оплата стоим. с расходного //счета
//метод, определяющий расходы за ежедневное кормление
public void feed ( )
{fAccount -=fInventory * kDailyFoodPrice;
// Оплата за ежедневное питание считывается с расходного счета
supper.feed ( ) }
}