Введение в Java Урок 30. Интерфейс в качестве типа
Мы не можем создать экземпляр интерфейса. Именно потому, что у него не существует реализации методов. Т. е. мы не можем написать, например, так:
IFigure f = new IFigure(); // Ошибка!
С другой стороны в переменную типа интерфейса мы можем записать любой класс, реализующий этот интерфейс. Например, в интерфейс IFigure из прошлого урока мы можем записать класс Rect:
IFigure f = new Rect(2, 4);
Это оказывается весьма удобным - так как реальный тип переменной нам может быть не известен на этапе компиляции. Известен же он может быть только на этапе выполнения программы.
Вот так может быть переделан тестовый класс из прошлого урока:
publicclass Test {
publicstaticvoid 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 интерфейса фактически вызовется метод из соответствующего класса, реализующего этот интерфейс. Т. е. площадь для прямоугольника будет считаться по его формуле, а для круга - по его.
PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru