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



Эта статья поможет вам понять ключевое различие между абстрактным классом и интерфейсом в java с помощью примера программы.

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

В этой статье обсуждаются следующие темы:





Чтобы понять различия между абстрактным классом и интерфейсом в , вам нужно знать, что такое абстрактный класс и что такое интерфейс. Итак, давайте начнем с обсуждения, что это такое.

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

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



Заметка: An абстрактный метод , это метод, который не реализован на месте и добавляетнезавершенность класс .

package MyPackage // абстрактный класс абстрактный класс Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // объявляем неабстрактные методы // он имеет реализацию по умолчанию public void BasicInfo (String details) {System. out.println (this.AnimalName + '' + details)} // абстрактные методы, которые будут // реализованы его подклассом (-ами) abstract public voidhabat () abstract public void respration ()} class Terrestrial extends Animal {// конструктор Terrestrial (String name) {super (name)} @Override public void Habitat () {System.out.println ('leave on land and')} @Override public void respration () {System.out.println ('respire через легкие или трахею. ')}} class Aquatic extends Animal {// конструктор Aquatic (String name) {super (name)} @Override public voidhabat () {System.out.println (' Он уходит в воду и ') } @Override public void respration () {System.out.println ('дышите через жабры или их кожу.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// создание класса Object of Terrestrial // и использование ссылки на класс Animal. Animal object1 = новый Земной ('Люди') object1.BasicInfo ('Земные существа, они') object1.habitat () object1.respiration () System.out.println ('') // Создание объектов круга класса Animal object2 = new Aquatic ('Рыбы') object2.BasicInfo ('являются акавтическими существами, они') object2.habitat () object2.respiration ()}}

Вывод

Люди - земные существа, они покидают сушу и дышат через легкие или трахею. Рыбы водные существа, они уходят в воду и дышат через жабры или их кожу.

В Базовая информация () это метод, используемый Наземный и Водный классы. поскольку Класс животных не может быть инициировано, мы создаем объекты Наземный и Водный классы для программирования. Далее у нас есть интерфейсы.



Интерфейс в Java

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

package MyPackage interface Animals {// абстрактные методы voidhabat () void respration ()} class TerrestrialA реализует Animals {String AnimalName = '' // конструктор TerrestrialA (String name) {this.AnimalName = name} @Override public voidhabat () {System.out.println (this.AnimalName + 'оставить на суше и')} @Override public void respration () {System.out.println ('дышать через легкие или трахею.')}} Класс AquaticA реализует животных {String AnimalName = '' // конструктор AquaticA (String name) {this.AnimalName = name} @Override public voidhabatat () {System.out.println (this.AnimalName + 'оставить в воде и')} @Override общественное пустое дыхание () {System.out.println ('дышите через жабры или их кожу.')}} Class JavaInterfaceDemo {public static void main (String [] args) {// создание класса Object of Terrestrial // и использование ссылки на класс Animal . Животные object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // создание объектов класса circle Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Вывод

Люди уходят на сушу и дышат через легкие или трахею. Рыбы уходят в воду и дышат через жабры или кожу.

Если у вас нет общего кода между вашими классы , тогда вы можете перейти к интерфейсу. Интерфейс больше похож на план класса, поскольку у него нет не абстрактных методов.

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

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

В таблице ниже перечислены ключевые различия между абстрактным классом и интерфейсом.

Параметр Абстрактный класс Интерфейс

Реализация метода по умолчанию

Может иметь реализацию метода по умолчанию

Интерфейсы обеспечивают чистую абстракцию и вообще не могут иметь реализации

Переменные

Он может содержать не конечные переменные.

Переменные, объявленные в интерфейсе, по умолчанию являются окончательными.

Ключевое слово использовано

Абстрактный класс может быть расширен с помощью ключевого слова extends

Интерфейс должен быть реализован с использованием ключевых слов ïmplements.

Модификаторы доступа

Мочьиметь модификатор public, protected, private и default

Методы интерфейса по умолчанию общедоступны. вы не можете использовать с ним другие модификаторы доступа

Скорость реализации

Это быстрее интерфейса

Интерфейс немного медленнее и требует дополнительного косвенного обращения

Нормальный класс

Он может расширять только один абстрактный класс

Может реализовать несколько интерфейсов

Конструкторы

У абстрактного класса могут быть конструкторы

Интерфейс не может иметь конструкторов

Множественное наследование

Абстрактный класс может расширять другой класс и может реализовывать несколько интерфейсов Java.

разница между перегрузкой и переопределением в c ++

Интерфейс может расширять только другой интерфейс Java.

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

Когда использовать абстрактный класс и когда использовать интерфейс?

Рассмотрите возможность использования абстрактных классов в следующих случаях:

  • Если у вас есть родственные классы, которым нужно поделиться те же строки кода
  • Когда вы хотите определить нестатические или неокончательные поля
  • Когда естьметоды или поляили требовать модификаторы доступа кроме публичных (например, защищенные и частные)

Рассмотрите возможность использования интерфейсов в следующих случаях:

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

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

Убедитесь, что вы как можно больше тренируетесь и верните свой опыт.

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

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого «интерфейса Java-карты». статья, и мы свяжемся с вами в ближайшее время.