2010-10-05 3 views
-1

Можно создать дубликат:
Abstract class and Interface class?Когда мне нужно использовать абстрактный класс и интерфейс в Java?

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

Мои сомнения

  1. Какая ситуация мне нужно использовать абстрактный класс и какой ситуации мне нужно использовать интерфейс.
  2. Интерфейс
  3. удовлетворяет абстрактным свойствам класса. так почему же нам нужен особенно абстрактный класс?
  4. Я знаю, что абстрактный класс содержит абстрактные методы и не абстрактные методы, но мы можем использовать абстрактный класс как обычный класс, тогда результат будет таким же в обоих классах. обычный класс также унаследовал то же, что и абстрактный класс. Итак, зачем нам нужен абстрактный класс.

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

Спасибо.

+0

Также настоятельно рекомендуем ответ на этот вопрос: http://stackoverflow.com/questions/56867/interface-vs-base-class –

+0

Рассмотрите возможность использования абстрактных классов, если любой из этих утверждений относится к вашей ситуации: - Вы хотите поделиться кодом между несколькими близкородственными классами. - Вы ожидаете, что классы, которые расширяют ваш абстрактный класс, имеют много общих методов или полей или требуют модификаторов доступа, кроме публичных (таких как защищенные и закрытые). - Вы хотите объявить нестатические или нефинальные поля. Это позволяет вам определять методы, которые могут получить доступ и изменить состояние объекта, к которому они принадлежат. – sarath

ответ

0

Вам нужно использовать абстрактные классы, если вы хотите применить шаблон шаблона http://en.wikipedia.org/wiki/Template_method_pattern, как правило, в коде рамки. Как правило, если вы не намерены внедрять шаблон шаблона, вам лучше работать с интерфейсами, которые позволяют свободно связывать, как это делает весна. Свободная связь приводит к дизайну, открытому для эволюций и лучшей тестируемости, с такими методами, как mock objects (http://easymock.org)

+0

привет, когда нам нужно использовать перегрузку и переопределение, если вы знаете хороший пример, пожалуйста, скажите мне. – Velmurugan

+0

Перегрузка не имеет ничего общего с абстрактными классами и интерфейсами.Перегрузка имеет метод с тем же именем, что и существующий метод, но с разным видом или количеством параметров. Переопределение переопределяет метод суперкласса в дочернем классе. См. Ответ http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading, там есть пример. –

2

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

1

Я бы сказал, что существует два типа наследования. Один из них я бы сказал, как наследование реализации, а другое - как наследование контрактов.

Абстрактные классы используются для реализации Наследование. Вы можете расширить/изменить поведение вашего супер/родительского класса.

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

Смежные вопросы