Использование интерфейса : В разработке программного обеспечения существует ряд ситуаций, когда разрозненным группам программистов важно согласиться на "контракт", в котором прописано, как взаимодействует их программное обеспечение. Каждая группа должна иметь возможность писать свой код, не зная, как пишется код другой группы. Вообще говоря, интерфейсы - это такие контракты.
Одним из преимуществ использования интерфейсов является то, что они имитируют множественное наследование. Все классы в Java (кроме java.lang.Object, корневого класса системы типов Java) должны иметь ровно один базовый класс; множественное наследование классов не допускается. Кроме того, класс Java может реализовывать, а интерфейс может расширять любое количество интерфейсов; однако интерфейс может не реализовывать интерфейс.
Еще одним применением интерфейсов является возможность использовать объект, не зная его типа класса, а скорее только то, что он реализует определенный интерфейс.
Различие между абстрактным классом и интерфейсом : Абстрактный класс - это класс, который содержит один или несколько абстрактных методов, которые должны быть реализованы подклассами. Абстрактный класс также не может содержать никаких абстрактных методов. Интерфейс Java может содержать только объявления методов и открытые статические конечные константы и не содержит их реализацию. Классы, которые реализуют Интерфейс, должны предоставить определение метода для всех существующих методов. Абстрактный класс означает, что класс должен быть расширен. Абстрактный класс должен быть расширен первым конкретным классом в дереве наследования. В абстрактном классе мы можем иметь как объявление, так и определение метода, но в интерфейсах есть только сигнатуры метода, а не его определение. Интерфейс похож на 100% чистый абстрактный класс. Класс может расширять только один класс, но может реализовывать несколько интерфейсов. Интерфейсы обеспечивают множественное наследование, не вызывая смертельного алмаза смерти проблемы.