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

48
задан casperOne 12 January 2013 в 04:32
поделиться

5 ответов

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

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

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

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

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

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

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

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

62
ответ дан 7 November 2019 в 12:35
поделиться

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

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

1
ответ дан 7 November 2019 в 12:35
поделиться

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

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

0
ответ дан 7 November 2019 в 12:35
поделиться

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

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

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

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

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

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

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

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

8
ответ дан 7 November 2019 в 12:35
поделиться

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

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

3
ответ дан 7 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: