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

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

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

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

Что такое Аннотация?

Класс, который объявлен ключевым словом «абстрактный», называется абстрактным классом. Класс Abstract может иметь абстрактный (метод без тела) и конкретные методы (метод с телом), в отличие от обычного класса. Абстрактный класс не может быть создан, т.е. мы не можем создать объект для него, но можем иметь ссылки на абстрактный класс, создав другой класс, который расширяет абстрактный класс и обеспечивает реализацию методов. Мы можем использовать объект дочернего объекта (который только что создан) для вызова абстрактных и обычных методов. Он может иметь конструкторы, и абстрактный класс вызывается при создании экземпляра унаследованного класса. В Java у нас может быть абстрактный класс без абстрактного ключевого слова, но эти классы не могут быть созданы, только унаследованы и могут иметь конечные методы.

Сравнение лицом к лицу между интерфейсом Java и абстрактным классом (инфографика)

Ниже приведены 9 лучших сравнений между интерфейсом Java и абстрактным классом.

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

Оба интерфейса Java и абстрактный класс являются популярным выбором на рынке; Давайте обсудим некоторые основные различия между интерфейсом Java и абстрактным классом:

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

Сравнительная таблица Java-интерфейс против абстрактного класса

Ниже приведена таблица сравнения между интерфейсом Java и абстрактным классом.

Основа сравнения между интерфейсом Java и абстрактным классомАбстрактный классИнтерфейс Java
Тип методаКласс Abstract может иметь как абстрактные (методы без тела), так и неабстрактные (методы с телом) методы.В интерфейсе мы можем иметь только абстрактные методы. В Java 8 интерфейс также может иметь статические методы и методы по умолчанию
СинтаксисАбстрактный класс может быть объявлен следующим образом:
публичная абстрактная классная школа (публичные абстрактные классы void ();
public abstract void сила ();)
Интерфейс может быть объявлен следующим образом:
форма открытого интерфейса (Void draw_rect (); Void draw_square ();)
Конечная переменнаяАбстрактный класс может иметь конечные и не финальные переменные.Принимая во внимание, что интерфейс может иметь только конечные переменные, поскольку переменные по умолчанию являются окончательными в интерфейсе.
РеализацияАбстрактный класс может обеспечить реализацию всех абстрактных методов в интерфейсе.Принимая во внимание, что в интерфейсе мы не можем обеспечить реализацию абстрактного класса.
Тип переменнойАбстрактный класс может содержать все типы переменных, например: final, non-final, static, non-static, private, public и т.д.Принимая во внимание, что интерфейс может иметь только публичные, статические и конечные переменные.
Доступ к даннымУ абстрактного класса могут быть члены класса как закрытые, защищенные, общедоступные и т. Д.Интерфейс может иметь только открытые члены класса, так как члены данных интерфейса по умолчанию являются открытыми.
Наследование против абстракцииАбстрактный класс может быть расширен с помощью ключевого слова extends и должен обеспечивать реализацию всех объявленных методов в родительском или абстрактном классе.Интерфейс может быть реализован с использованием ключевого слова interface и должен обеспечивать реализацию для всех методов, объявленных в интерфейсе.
Многократная реализацияАбстрактный класс может расширять другой класс Java, реализующий несколько интерфейсов.Интерфейс может расширять только другой интерфейс.
Когда использоватьАбстрактный класс необходимо использовать, когда некоторым классам нужно совместно использовать несколько строк кода, тогда мы можем поместить этот код в абстрактный класс и распространить его на все связанные классы.Интерфейс может использоваться, когда нам нужно добиться множественного наследования, полной абстракции путем реализации всех методов, объявленных в интерфейсе классом, который реализует интерфейс.

Вывод - интерфейс Java против абстрактного класса

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

Рекомендуемая статья

Это было руководство к основным различиям между Интерфейсом Java и Абстрактным Классом. Здесь мы также обсудим ключевые различия между интерфейсом Java и абстрактным классом с помощью инфографики и таблицы сравнения. Вы также можете взглянуть на следующие статьи -

  1. Насколько полезны вопросы и ответы по интервью на C #?
  2. 8 полезных сравнений - HTML5 против Flash
  3. Java против C # - 8 важных отличий
  4. Рубин против Узла
  5. Сравнение HTML5 и JavaScript
  6. ArrayList против Java Vector