Понимание интерфейсов
Интерфейсы предоставляют еще один способ достижения абстракции в Java. В отличие от абстрактных классов, интерфейсы являются полностью абстрактными и не могут содержать реализацию методов (до Java 8).
Интерфейс определяет контракт, которому должны следовать классы, реализующие его, указывая, что класс может делать, не наказывая, как он должен это делать.
Что такое интерфейс?
Основные характеристики интерфейсов:
- Объявляются с использованием ключевого слова
interface
- Все методы неявно являются публичными и абстрактными (до Java 8)
- Все поля неявно являются публичными, статическими и константными (final)
- Класс может реализовать несколько интерфейсов
- Интерфейсы могут расширять несколько интерфейсов
Давайте создадим простой интерфейс, изменив файл /home/labex/project/interfaceTest.java
:
// Define an interface
interface Animal {
// Constants (implicitly public, static, final)
String CATEGORY = "Living Being";
// Abstract methods (implicitly public and abstract)
void makeSound();
void move();
}
// Class implementing the interface
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Dog barks: Woof! Woof!");
}
@Override
public void move() {
System.out.println("Dog runs on four legs");
}
}
// Main class to test the interface
public class interfaceTest {
public static void main(String[] args) {
// Create a Dog object
Dog dog = new Dog();
// Call the interface methods
dog.makeSound();
dog.move();
// Access the interface constant
System.out.println("Category: " + Animal.CATEGORY);
}
}
Запустим этот код, чтобы увидеть, как работают интерфейсы:
javac /home/labex/project/interfaceTest.java
java interfaceTest
Вы должны увидеть следующий вывод:
Dog barks: Woof! Woof!
Dog runs on four legs
Category: Living Being
В этом примере демонстрируется базовая концепция интерфейсов. Интерфейс Animal
определяет контракт, который класс Dog
должен реализовать. Любой класс, реализующий интерфейс Animal
, должен предоставить реализацию для всех методов, объявленных в интерфейсе.