Абстрактный класс и интерфейс в основном используются для абстракции, однако они сильно отличаются друг от друга. Оба являются основной частью Java, но имеют свои собственные приложения. Хотя оба термина могут быть синонимами друг друга, они не могут быть взаимозаменяемыми.
Есть существенные различия между ними. Хотя интерфейсный метод является абстрактным по умолчанию, абстрактный может содержать как абстрактные, так и неабстрактные методы. Итак, начиная с Java 8, интерфейсы также имеют реализации методов, и они могут иметь как статические, так и стандартные методы в Java. Давайте изучим разницу между ними в деталях.
Абстрактный класс в Java - это класс, который объявлен абстрактным - он может содержать или не содержать абстрактные методы. Он очень похож на интерфейс Java, за исключением того факта, что он может содержать реализацию метода по умолчанию. Как и в объектно-ориентированном программировании, абстракция в Java достигается с помощью абстрактных классов и интерфейсов. В Java абстракция означает скрытие не относящихся к делу деталей от пользователя, чтобы сосредоточиться только на важных деталях, чтобы повысить эффективность и тем самым снизить сложность. Ключевое слово «abstract» используется для создания абстрактного класса непосредственно перед ключевым словом class в объявлении класса.
Абстрактный класс может содержать или не содержать методы абстракции (методы без тела), но если у класса есть хотя бы один метод абстракции, он должен быть объявлен абстрактным. Однако неабстрактные методы могут также использоваться только в абстрактном классе, но только для реализации поведения по умолчанию. Методы в абстрактном классе могут иметь модификаторы доступа, такие как private, public, static и protected, в зависимости от уровня видимости. Абстрактный класс не может быть создан, и он не обеспечивает 100-процентную абстракцию из-за того, что он может иметь конкретный метод.
Интерфейс, хотя выглядит как класс, это не так. Поскольку Java не поддерживает множественное наследование, интерфейс иногда идеально подходит для обеспечения базы для иерархии классов. Интерфейс - это скорее проект класса, который также используется для достижения абстракции в Java. Он содержит абстрактные методы и статические константы. Проще говоря, интерфейс - это набор абстрактных методов, который используется для определения поведения, которое должен реализовать класс. В отличие от абстрактного класса, интерфейс обеспечивает полную абстракцию в Java. Он может иметь как методы, так и переменные, как и класс, однако методы, объявленные в интерфейсе, по умолчанию являются абстрактными..
Абстрактный класс | Интерфейс |
Ключевое слово abstract используется для создания абстрактного класса и может использоваться с методами. | Ключевое слово Interface используется для создания интерфейса, но его нельзя использовать с методами. |
Класс может расширять только один абстрактный класс. | Класс может реализовывать более одного интерфейса. |
Абстрактный класс может иметь как абстрактные, так и неабстрактные методы.. | Интерфейс может иметь только абстрактные методы. |
Переменные не являются окончательными по умолчанию. Может содержать не финальные переменные. | Переменные являются окончательными по умолчанию в интерфейсе. |
Абстрактный класс может обеспечить реализацию интерфейса. | Интерфейс не может обеспечить реализацию абстрактного класса. |
У него могут быть методы с реализациями. | Он обеспечивает абсолютную абстракцию и не может иметь реализации методов. |
Может иметь публичные, приватные, статические и защищенные модификаторы доступа. | Методы неявно общедоступны и абстрактны в интерфейсе Java. |
Он не поддерживает множественное наследование. | Поддерживает множественное наследование. |
Идеально подходит для повторного использования кода и перспективы развития. | Идеально подходит для объявления типа. |
И абстрактный класс, и интерфейс используются для абстракции; однако, они имеют свою справедливую долю различий. Основное различие между ними обусловлено методами абстракции. В то время как первый может иметь или не иметь абстрактные методы, последний неявно абстрактный. Абстрактный класс может иметь как абстрактные, так и неабстрактные методы. Интерфейс, с другой стороны, может иметь только абстрактные методы, поэтому они не могут иметь реализацию, что просто означает, что интерфейс не может иметь неабстрактные методы. Абстрактный класс не может быть создан, что запрещает создание объекта. Интерфейс, с другой стороны, может выглядеть как класс, но это не так.