
Пример реализации интерфейсов :
Рассмотрим
фрагмент программы выдающий информацию
о товарах продаваемых в магазине: книга
–основной товар, мелкие животные и
птицы – вспомогательный товар.
В программе реализуется иерархия классов, разработанная с учетом общности экземплярных переменных и методов классов.
interface TAbstractProduct
// объявляем абстрактные методы, общие для всех объектов,
//но реализуемые, в дальнейшем, по разному
{ public float getPrice(); //получить цену
public String getPrintableType(); //получить название продукции
}
//расширяем методы спецификой живой продукции (название корма)
interface TLiveProduct extends TAbstractProduct //живой продукт, //расширение интерфейса
{ public String getFood(); //получить название корма
}
//расширяем методы спецификой основной продукции (книги)
interface TGeneralProduct extends TAbstractProduct //основной продукт
{ //расширение интерф.
public short itemsPerCase(); }
//частичная реализация методов интерфейса
abstract class TSmallPet implements TLiveProduct
{ //класс абстрактный, т.к. не реализует метод public String getFood();
float fPrice;
TSmallPet(float thePrice) { fPrice = thePrice; }
public float getPrice() { return fPrice; }
}
class THamster extends TSmallPet //реализация абстрактного класса
{ THamster(float thePrice)
{ super(thePrice); } //вызов конструктора базового класса
public String getFood() //реализация метода интерфейса для //хомячков
{ return "Зерно"; }
public String getPrintableType()
{ return "Золотистый хомячок"; }
}
class TParrot extends TSmallPet //реализация баз. класса и не реализованных
{ //методов интерфейса
TParrot(float thePrice)
{ super(thePrice); } //вызов конструктора базового класса
public String getFood() //реализация метода интерфейса для попугаев
{ return "Зерно и овощи"; }
public String getPrintableType()
{ return "Попугай"; }
}
class TBook implements TGeneralProduct
{ private static final short kItemsPerCase = 144;
float fPrice; String fTitle;
TBook(float thePrice, String theTitle) //конструктор
{ fPrice = thePrice; fTitle = theTitle; }
public float getPrice() //реализация метода доступа к переменной
{ return fPrice; }
public String getPrintableType()
{ return "Книга называется - " + fTitle; }
public short itemsPerCase()
{ return kItemsPerCase; }
}
public class TStore
{ static THamster theHamster;
static TParrot theParrot;
static TBook theBook;
public static void init() //статический метод инициализации //объектов всех объявленных классов
{
theHamster = new THamster((float) 4.95);
theParrot = new TParrot((float) 17.99);
theBook = new TBook((float) 14.95, "Как кормить птиц");
}
public static void main(String argv[])
{ init(); //создание и инициализация объектов стат.методом
getInfo(theHamster); //передача методу объекта произ, затем //использование
getInfo(theParrot); //реализаций методов интерфейсов
getInfo(theBook);
}
public static void getInfo(TAbstractProduct theItem) //ссылка на баз интерфейс //подменяется ссылкой на реализованный объект для //которого все данные реализованы
{
System.out.println("Наименование товара - " + theItem.getPrintableType() + ".");
System.out.println("Цена " + theItem.getPrice() + " за шт.");
}
}
/*результат работы:
наименование товара - Золотистый хомячек.
Цена 4.95 за шт.
Наименование товара - Попугай.
Ц
Наименование товара - Книга называется - Как кормить птиц.
Цена 14.95 за шт.
*/