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

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

У меня есть некоторые основные вопросы об абстрактных классах/методах. Я знаю, что базовое использование абстрактных классов - это создание шаблонов для будущих классов. Но есть ли их применение? Когда вы предпочитаете их по интерфейсам, а когда нет? Также, когда абстрактные методы полезны?

4b9b3361

Ответ 1

  Я знаю основы использования абстрактных классов это создавать шаблоны для будущего классы. Но есть ли еще использование из них?

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

Вы не могли предоставить реализацию метода по умолчанию в интерфейсе до Java 8.

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

Абстрактные классы хорошо подходят, если вы хотите предоставить подробности реализации своим детям, но не хотите, чтобы экземпляр вашего класса создавался напрямую (что позволяет вам частично определить класс).

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

Кроме того, когда полезны абстрактные методы?

Абстрактные методы полезны так же, как полезно определение методов в интерфейсе. Разработчик класса Abstract может сказать "любой мой ребенок ДОЛЖЕН реализовать этот метод".

Ответ 2

прочитайте следующую статью http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/

Абстрактные классы

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

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

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

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

Используйте абстрактный класс

При создании библиотеки классов, которая будет широко распространен или повторно - особенно для клиентов, используйте абстрактный класс предпочтительнее интерфейс; потому что это упрощает управления версиями. Это практика используется командой Microsoft, которая разработала Библиотека базовых классов. (COM был разработаны вокруг интерфейсов.) Используйте абстрактный класс для определения общей базы класс для семьи типов. Используйте абстрактный класс для обеспечения значения по умолчанию поведение. Подкласс только базовый класс в иерархии, к которой класс логически принадлежит.

Ответ 3

На очень высоком уровне:

Абстракция любого рода сводится к разделению проблем. Код "Клиент" абстракции не волнует, как выполняется контракт, открытый абстракцией. Обычно вам неважно, использует ли класс строк для реализации внутреннего хранилища с нулевым завершением или с буфером длины. Инкапсуляция скрывает детали, но путем создания классов/методов/и т.д. abstract, вы разрешаете реализацию изменять или добавлять новые реализации, не влияя на код клиента.

Ответ 4

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

Хорошее эмпирическое правило состоит в том, что только листовые узлы иерархии классов должны быть созданы. Создание абстрактных абстрактных узлов является простым способом обеспечения этого.

Ответ 5

Абстрактные классы/методы обычно используются, когда класс предоставляет некоторую функциональность высокого уровня, но не учитывает определенные детали, которые должны быть реализованы производными классами. Создание абстрактности класса/метода гарантирует, что оно не может использоваться само по себе, но должно быть специализированным для определения деталей, которые были исключены из реализации высокого уровня. Это чаще всего используется с шаблоном метода шаблона:

http://en.wikipedia.org/wiki/Template_method_pattern