|
Java. объектно-ориентированное программирование с интерфейсамиНовый тип вводится спецификацией интерфейса. В C++ класс неявно определяет интерфейс. И в силу этого одновременно объявляет тип. При этом единственный интерфейс связывается с единственной реализацией. Множественное наследование и абстрактные классы в C++ - это прежде всего попытка обойти жесткую детерминированность. В Java подобного ограничения нет. Любой интерфейс (тип) может иметь много реализаций. Любой класс может реализовывать много интерфейсов. В качестве примера попробуем объявить собственный тип "число". Для краткости ограничимся операциями сложения и умножения. /* INumber.java ------------------------------------------------------ (8<* * Декларация типа INumber и фрагмент программы, использующий этот тип. * * -------------------------------------------------------------------- */ interface INumber { public void setValue(String s); public INumber add(INumber n); public INumber mul(INumber n); public String toString(); } class CalcNumber { void calculation(INumber n1, INumber n2, INumber n3) { INumber xx; xx = n2; // Если закомментировать предыдущую строку, то компилятор выдаст ошибку: // variable xx might not have been initialized xx.setValue("5.3"); System.out.println("xx="+xx.toString()); n1.setValue("21"); n2.setValue("37.6"); System.out.println("n1="+n1.toString()); System.out.println("n2="+n2.toString()); System.out.println("n3="+n3.toString()); System.out.println("(n1+n2)*n3=" + n1.add(n2).mul(n3).toString()); n1.setValue("21"); System.out.println("(n2+n1)*n3=" + n2.add(n1).mul(n3).toString()); n2.setValue("37.6"); System.out.println("n1*(n2+n3)=" + n1.mul(n2.add(n3)).toString()); n1.setValue("21"); n2.setValue("37.6"); System.out.println("n3*(n1+n2)=" + n3.mul(n1.add(n2)).toString()); } } // (8< Из приведенного примера видно: Интерфейс позволяет объявить тип. В приведенном примере объявляются переменные и параметры типа INumber, описываются действия над ними. Компиляция выполняется без ошибок. Реализация типа передается через объект. Объекты n1, n2 и n3 передаются через параметры. Тем самым компилятор информируется, что объекты проинициализированы где-то за пределами данного модуля. Этого достаточно. Классы пока не нужны. Инициализировать объект в приведенном модуле мы не можем, т.к. для этого необходимо иметь реализацию. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Другие статьи по теме: - почтовая программа - своими руками!- Java-приложение: заглянем внутрь - возможности языка java - практическое введение в программирование на javascript - поисковая оптимизация как вид деятельности |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |