Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Интерфейс в качестве типа



Мы не можем создать экземпляр интерфейса. Именно потому, что у него не существует реализации методов. Т. е. мы не можем написать, например, так:

IFigure f = new IFigure(); // Ошибка!

С другой стороны в переменную типа интерфейса мы можем записать любой класс, реализующий этот интерфейс. Например, в интерфейс IFigure из прошлой программы мы можем записать класс Rect:

IFigure f = new Rect(2, 4);

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

Вот так может быть переделан тестовый класс из программы выше:

public class Test {

public static void main(String[] args) {

IFigure[] f = new IFigure[2];//= //new Rect(2, 4);

f[0] = new Rect(2, 4);

f[1] = new Circle(1);

for (int i = 0; i < 2; i++){

System.out.println("Square[" + i + "]: " + f[i].square());

}

}

}

Обратите внимание, что тут мы в переменные типа интерфейса (у нас массив из 2-х переменных такого типа) записываем классы-потомки этого интерфейса (а именно Rect и Circle). И в момент вызова метода square интерфейса фактически вызовется метод из соответствующего класса, реализующего этот интерфейс. Т. е. площадь для прямоугольника будет считаться по его формуле, а для круга - по его.





Дата публикования: 2014-11-04; Прочитано: 300 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...