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

Anonim

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

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

Что такое абстрактный класс в Java?

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

Абстрактный класс может содержать или не содержать методы абстракции (методы без тела), но если класс имеет хотя бы один метод абстракции, он должен быть объявлен абстрактным. Однако не абстрактные методы могут использоваться только в абстрактном классе, но только для реализации поведения по умолчанию. Методы абстрактного класса могут иметь модификаторы доступа, такие как частные, общедоступные, статические и защищенные, в зависимости от уровня видимости. Абстрактный класс не может быть создан, и он не обеспечивает 100-процентную абстракцию из-за того, что он может иметь конкретный метод.

Что такое интерфейс?

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

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

  1. «Множественное наследование» абстрактного класса и интерфейса в Java - Несмотря на то, что как абстрактный класс, так и интерфейс в основном используются для абстракции, они сильно отличаются друг от друга. Хотя абстрактный класс является классом, интерфейс является интерфейсом. Это означает, что в то время как интерфейс может расширить только другой интерфейс Java, абстрактный класс может реализовать множественные наследования в Java. Ну, Java не поддерживает множественные наследования, но можно реализовать множественные наследования в Java.
  2. «Тип метода» абстрактного класса и интерфейса в Java - Второе главное отличие между ними состоит в том, что, хотя интерфейс может иметь только абстрактные методы, абстрактный класс может иметь как абстрактные, так и не абстрактные методы. Однако, поскольку Java 8, интерфейс может иметь стандартные и статические методы.
  3. «Модификаторы доступа» абстрактного класса и интерфейса в Java - В абстрактном классе могут быть общедоступные, частные и защищенные модификаторы доступа, однако методы интерфейса неявно публичны и абстрактны. Вы не можете использовать какой-либо другой модификатор доступа с помощью методов интерфейса ».
  4. «Внедрение» абстрактного класса и интерфейса в Java - Абстрактный класс может обеспечить реализацию интерфейса. С другой стороны, интерфейс не может обеспечить реализацию абстрактного класса.
  5. «Ключевое слово» абстрактного класса и интерфейса в Java- Хотя ключевое слово «абстрактное» используется для объявления абстрактного метода класса как абстрактного, однако, интерфейсы - это совсем другая история; они могут иметь только публичные, статические конечные константы и декларации методов.
  6. «Использование» абстрактного класса и интерфейса в Java - Хотя интерфейс идеально подходит для объявления типа, абстрактный класс лучше всего подходит для повторного использования кода и перспективы развития. Интерфейс выглядит как класс, но это не класс.
  7. «Надежность» абстрактного класса и интерфейса в Java- Еще одно существенное различие между абстрактным классом и интерфейсом заключается в том, что первое немного быстрее, чем последнее, потому что поиск обычно связан с интерфейсом, прежде чем любой переопределенный метод вызывается в Java.
  8. «Конечные переменные» абстрактного класса и интерфейса в Java - Переменные, объявленные в интерфейсе, по умолчанию окончательны, а абстрактный класс может содержать или не содержать не конечные переменные.

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

Абстрактный класс Интерфейс
Абстрактное ключевое слово используется для создания абстрактного класса и его можно использовать с методами. Ключевое слово интерфейса используется для создания интерфейса, но оно не может использоваться с методами.
Класс может распространяться только на один абстрактный класс. Класс может реализовывать более одного интерфейса.
Абстрактный класс может иметь как абстрактные, так и не абстрактные методы. Интерфейс может иметь только абстрактные методы.
По умолчанию переменные не являются окончательными. Он может содержать не конечные переменные. Переменные конечны по умолчанию в интерфейсе.
Абстрактный класс может обеспечить реализацию интерфейса. Интерфейс не может обеспечить реализацию абстрактного класса.
Он может иметь методы с реализациями. Он обеспечивает абсолютную абстракцию и не может иметь реализации метода.
Он может иметь модификаторы public, private, static и protected access. Эти методы неявно публичны и абстрактны в интерфейсе Java.
Он не поддерживает множественные наследования. Он поддерживает множественные наследования.
Он идеально подходит для повторного использования кода и эволюции. Он идеален для объявления типа.

Краткий обзор абстрактного класса и интерфейса в Java

Оба абстракции класса и интерфейса используются для абстракции; однако они имеют свою долю различий. Основное различие между ними обусловлено методами абстракции. Хотя первые могут иметь или не иметь абстрактных методов, последние неявно абстрактны. Абстрактный класс может иметь как абстрактные, так и не абстрактные методы. С другой стороны, интерфейс может иметь только абстрактные методы, поэтому они не могут иметь реализацию, что просто означает, что интерфейс не может иметь не абстрактных методов. Абстрактный класс не может быть создан, что запрещает создание объекта. С другой стороны, интерфейс может выглядеть как класс, но это не так.