Различия между абстрактным классом и интерфейсом в Java

Anonim

Абстрактный класс vs Интерфейс в Java

Чтобы понять различия между абстрактным классом и интерфейсом в Java, важно, прежде всего, понять каждый из них независимо. Абстрактный класс в Java используется в объявлении подклассов с набором общих характеристик. Общее использование абстрактного класса - это суперкласс других классов, который, по сути, позволяет ему расширять абстрактный класс. Абстрактное ключевое слово используется в объявлении абстрактного класса. Как и любой другой класс, абстрактный класс имеет поля, описывающие методы и характеристики, которые может выполнять класс. Посредством простого объявления абстрактного класса класс не может быть инициирован

Интерфейс Java можно приравнять к протоколу. Он представляет собой предустановленное и согласованное поведение, которое позволяет облегчить взаимодействие несвязанных объектов. В зависимости от пользователя интерфейс содержит ключ к выполнению различных действий. Интерфейс, таким образом, служит связующим звеном между производителем и потребителем. Таким образом, интерфейсы в Java представляют собой группу методов, содержащих пустые тела, которые могут иметь постоянные объявления. При представлении класса в интерфейс Java это означает, что поведение, ожидаемое от класса, - это реализация всех методов интерфейса.

Различия

Во-первых, абстрактный класс позволяет использовать поля, которые не являются статическими или конечными, в отличие от статических и конечных полей, используемых в интерфейсах. Интерфейсы не могут иметь какой-либо код реализации, используемый в них, и может существовать код реализации, используемый в абстрактном классе. Коды реализации, развернутые в абстрактном классе, могут иметь несколько или все реализованные методы. По умолчанию все методы интерфейса являются «абстрактными».

Видимость также возможна для методов или членов абстрактного класса, которые могут варьироваться, например, public, protected, private или none. С другой стороны, видимость интерфейса может быть задана только для одного режима видимости, который является «общедоступным».

Абстрактный класс автоматически наследует класс объекта. Это, по сути, означает, что включены такие методы, как clone () и equals (). В интерфейсе невозможно наследование класса объектов. После этого абстрактный класс имеет возможность иметь конструктор, но интерфейс не может его иметь.

Интерфейс в Java также имеет очень важную функцию с реализацией множественных наследований, поскольку класс может иметь только один суперкласс. Хотя может присутствовать только один суперкласс, он может быть реализован в любом количестве интерфейсов. Невозможно иметь множественные наследования в абстрактном классе.

В производительности интерфейсы, как правило, медленнее реализации, а не абстрактного класса в основном из-за дополнительного направления поиска соответствующего метода в классе. Разница, однако, стала медленнее из-за современных виртуальных машин Java, которые постоянно обновляются.

Добавление метода в интерфейс требует отследить все классы реализации, реализующие конкретный интерфейс. Кроме того, вы можете расширить интерфейс, чтобы позволить ему иметь дополнительные методы. Если вы сталкиваетесь с абстрактным классом, все, что требуется, это добавить стандартную реализацию метода, и код продолжает работать. Поскольку существуют различия между абстрактными классами и интерфейсами, важно отметить, что они не являются конкурентами, но различия, упомянутые здесь, служат дополнением друг к другу.

Резюме

  1. Абстрактные поля классов не являются статическими или конечными, а не интерфейсом, который имеет статические и конечные таблицы.

  2. В интерфейсах не может использоваться код реализации, который может использоваться в абстрактном классе.

  3. Видимость интерфейса может быть только общедоступной, а видимость абстрактного класса может отличаться.

  4. Абстрактный класс автоматически наследует класс объекта, но он невозможен в интерфейсе.

  5. Абстрактный класс быстрее, чем интерфейс в реализации.