Подтвердить что ты не робот

В чем преимущество интерфейса над абстрактными классами?

Абстрактный класс имеет как конкретную, так и абстрактную функцию. интерфейс имеет только абстрактные функции.

В обоих случаях возможно переопределение. Это

Какое преимущество в реальном времени одно над другим?

4b9b3361

Ответ 1

Интерфейсы предназначены, когда вы хотите сказать: "Мне все равно, как вы это делаете, но вот что вам нужно сделать".

Абстрактные классы предназначены, когда вы хотите сказать: "Я знаю, что вы должны делать, и я знаю, как вы должны это делать в некоторых или многих случаях".

Абстрактные классы имеют некоторые серьезные недостатки. Например:

class House {

}

class Boat {

}

class HouseBoat extends /* Uh oh!! */ {
    // don't get me started on Farmer Insurance "Autoboathome" which is also a helicopter
}

Вы можете пройти через интерфейс:

interface Liveable {

}

interface Floatable {

}

class HouseBoat implements Liveable, Floatable {

}

Теперь абстрактные классы также очень полезны. Например, рассмотрим класс AbstractCollection. Он определяет поведение по умолчанию для очень распространенных методов для всех коллекций, таких как isEmpty() и contains(Object). Вы можете переопределить эти поведения, если хотите, но... является ли поведение для определения того, действительно ли коллекция пуста, вероятно, изменится? Обычно это будет size == 0.

И поскольку он не будет часто меняться, действительно ли стоит время разработчика, чтобы реализовать этот метод каждый... один... время... для каждого метода в этой "решаемой" категории? Не говоря уже о том, когда вам нужно внести изменения в это, вы будете иметь дублирование кода и пропущенные ошибки, если вам придется повторно внедрять его везде.

Ответ 2

Интерфейсы полезны, потому что Java не имеет множественного наследования (но вы можете реализовать столько интерфейсов, сколько хотите).

Абстрактные классы полезны, когда вам нужно конкретное поведение из базового класса.

Ответ 3

Факты -

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

Вы не переопределяете интерфейс. Вы его реализуете.

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

Абстрактные классы могут быть частично или полностью реализованы. Обозначение абстрактного класса просто мешает вам создавать экземпляр объекта такого типа.

Ответ 7

-Method без какой-либо реализации является абстрактным методом, всякий раз, когда класс содержит один или несколько абстрактных методов, тогда он должен быть объявлен как абстрактный класс

-Interface полностью абстрат, который не может иметь конструктор, экземпляр и статические блоки и содержит только два типа членов 1.публичный абстрактный метод 2.public-static-final переменная

* Оба экземпляра не могут быть созданы, но ссылка может быть создана.

* Какой из них лучше подходит, зависит от приложения -Интерфейсы полезны, потому что классы Java не будут поддерживать множественное наследование, но интерфейсы.

-Абстрактные классы полезны, когда вам нужно конкретное поведение из базового класса.

Ответ 8

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

Ответ 9

class Animal
{ void move(){} }

class Bird
{ void move(){fly} }

class Fish
{ void move(){swim} }

Теперь, если класс Animal является абстрактным классом, например

Animal a; 

a= new Bird(); or a = new Fish()

Здесь абстракция работает хорошо, но если есть 100 объектов, таких как Animal a[100];

Вы не можете писать new Bird().move или new Fish().move 100 раз

Используйте интерфейс и напишите a[i].move. Он будет дифференцироваться как птица или рыба и что move() будет вызываться

Во-вторых, он поддерживает множественное наследование, поскольку класс A может реализовать как можно больше интерфейсов.