Введение в Java Урок 29. Интерфейсы
Интерфейсы в Java предназначены только для объявления некоторых методов и констант. Никакие реализации методов в интерфейсах не предусматриваются. Т. е. интерфейс только содержит информацию о том, что методы с такими-то названиями в мнем существуют, но не содержит информации, как именно эти методы работают. Реализация же методов интерфейса будет содержаться в классах, которые этот интерфейс реализуют.
Интерфейсы вводятся ключевым словом interface. В объявлении же класса, реализующего некоторый интерфейс, после имени класса идет ключевое слово implements, после которого следует имя интерфейса или интерфейсов (класс может реализовывать несколько интерфейсов).
Вот примеры интерфейса для геометрической фигуры и 3-х классов конкретных герметрических фигур, реализующих этот интерфейс:
public interface IFigure {
double pi = 3.1415;
// Площадь.
double square();
}
// Класс прямоугольника.
public class Rect implements IFigure {
int width = 0;
int height = 0;
Rect(int width, int height){
this.width = width;
this.height = height;
}
public double square(){
return width * height;
}
}
// Класс треугольника.
public class Triangle implements IFigure {
double leg1 = 0;
double leg2 = 0;
public Triangle(double leg1, double leg2){
this.leg1 = leg1;
this.leg2 = leg2;
}
public double square() {
return leg1 * leg2 * 0.5;
}
}
// Класс круга.
public class Circle implements IFigure {
double radius;
public Circle(double radius){
this.radius = radius;
}
public double square() {
return radius * radius * pi;
}
}
А вот использование указанного интерфейса и классов, его реализующих:
public class Test {
public static void main(String[] args) {
Rect r = new Rect(2, 4);
System.out.println("Rect: " + r.square());
Triangle t = new Triangle(3, 4);
System.out.println("Triangle: " + t.square());
Circle c = new Circle(1);
System.out.println("Circle: " + c.square());
}
}
Обратите внимание, что каждый класс содержит метод square для вычисления площади. Этот метод обязан быть в каждом классе, так как он есть в интерфейсе, от которвх классы наследуются. Также обратите внимание, что в классе Circle мы использем константу pi из интерфейса. В других языках программирования объявление констант в интерфейсах не допускается.
Выведет программа естественно Rect: 8.0 Triangle: 6.0 и Circle: 3.1415.
|