Вот несколько описаний в терминологии мирян, чтобы помочь:
Интерфейс : Это набор методов.Они не имеют никакого определения, и их функция определяется классом , который реализует их.Примером интерфейса является список.Все списки (ArrayList, LinkedList) имеют методы add () и remove (), поскольку они реализуют интерфейс List , который требует их.
public interface List {
public void add (Object o);
public void remove (Object o);
}
public class MyList implements List {
public void add (Object o) {
// I must implement this method because of the interface List
}
public void remove (Object o) {
// I must implement this method because of the interface List
}
}
An Abstract Class : Это частично завершенный класс.Он отличается от интерфейса тем, что часто сам по себе содержит некоторые функции.Тем не менее, в нем (как правило) отсутствуют некоторые методы, которые должны быть определены под * классом * extension *.Эти методы определены как abstract методы в абстрактном суперклассе.
public abstract class AbstractThing {
public void method1 (Object o) {
// This is a real method that does things
}
// Anyone who extends me must implement this
public abstract void method2 (Object o1, Object o2);
}
public class ActualThing extends AbstractThing implements List {
public void add (Object o) {
// I must implement this method because of the interface List
}
public void remove (Object o) {
// I must implement this method because of the interface List
}
public void method2 (Object o1, Object o2) {
// I must implement this method because of abstract method in
// the super class
}
Ключевое слово Implements используется классом, чтобы указать, что он собирается реализоватьметоды, требуемые интерфейсом .Класс может реализовать столько интерфейсов, сколько ему нужно;единственное требование состоит в том, что он дает определение для каждого из этих методов.Он также может быть определен как abstract и полагаться на его подклассы для определения некоторых.Затем эти методы аналогичны абстрактным методам любого другого абстрактного класса.
Ключевое слово extends используется классом, чтобы указать, что он собирается добавить функциональность в некоторый существующий класс.Если родительский класс является абстрактным, расширяющий класс должен реализовывать любой из этих абстрактных методов в родительском.Класс может расширять только один родительский класс.
Почему вся эта сложность?Интерфейсы хороши тем, что вы можете предполагать определенные функциональные возможности реализации классов.Особый случай - интерфейс List.Большинству методов все равно, какой список они получают;они просто хотят знать, что объект поддерживает методы общего списка.В операторе:
List<String> myList = new ArrayList();
Вы создаете реальный объект ArrayList, но скрываете его реализацию под интерфейсом List.Затем, позже, если вы решите использовать LinkedList, вам не нужно менять весь код, поскольку он также реализует интерфейс List.
Есть также несколько «наборов интерфейсов», которые Java определяет(например, постоянство), но не реализует.Это позволяет сторонним разработчикам разрабатывать свои собственные реализации (фактические классы), но, поскольку все они реализуют один и тот же общий интерфейс, разработчики могут менять и внедрять реализации без изменения кода.