Почему мы создаем абстрактные классы, хотя все методы этого класса уже определены? Если ответ заключается в том, чтобы остановить программиста от создания объекта этого класса, не удалось ли мы добиться того же, используя частный конструктор?Почему мы создаем абстрактный класс, хотя все методы этого класса определены?
ответ
Шаблон проектирования создания класса как abstract
, хотя все методы определены, используется, когда абстрактный класс «ничего не делает» или реализации исключений из методов.
Мы можем увидеть это в действии в HttpServlet
класса, который имеет реализации для каждого из веб-методов (doGet()
, doPost()
, doPut()
и doDelete()
), которые бросают ServletException
и который подкласс должен переопределить, если они хотят, класс, который делает что-то полезное для определенного веб-метода.
Любые веб-методы, не переопределенные рабочей реализацией, по умолчанию будут взрываться.
У меня есть идея. Спасибо Пол – Shivam
Нет проблем! @Bohemian: P –
Идея абстрактного класса является общей базой для ряда других классов ..
Придумайте «Animals» .. Вы не можете создать что-то под названием «Animal» ..
Вы Cats и собак и кроликов, которые являются «животными».
У вас есть абстрактный класс под названием «Животное», а затем у вас есть класс Cat, который расширяет Animal или Dog, который расширяет Animal ... но вы не создаете экземпляр класса «Animal» непосредственно как его единственную общую базу ,
Это не отвечает на вопрос. –
Прочтите его снова и обратите внимание на два его вопроса и обратите внимание, что я ответил на первый вопрос, который делает его второй вопрос актуальным. – WORMSS
Я думаю, вы правы - я бы просто дал понять, что «Animal» не обязательно требует абстрактных методов или каких-либо методов вообще. Таким образом, актуальность вопроса однозначна. –
Класс, являющийся абстрактным, только предотвращает создание экземпляра определенного класса. Детские классы могут все еще допускать создание экземпляров.
Класс, не имеющий частных конструкторов, предотвращает подклассу, а также публичную копию.
Из вышесказанного вы можете видеть, что эти две вещи служат двум различным целям. Класс может иметь либо —, либо даже как.
В абстрактном классе вы можете определить константы, которые являются общими для многого класса
Если у вас есть класс, который содержит только статические методы, то вы можете сделать это абстрактно, так как нет необходимости инстанцирования его. По крайней мере, я могу думать о полезных или вспомогательных классах.
Это не будет отличаться от использования частного конструктора, и это чаще используется для классов утилит, поскольку оно также предотвращает подтипирование. –
Абстрактные классы показывают, что этот класс сам по себе не используется независимо и некоторые другие конкретные классы должны расширять его, чтобы иметь смысл.
Хотя предотвращение использования private
конструктора будет населяют подклассов.
Абстрактные классы без абстрактных методов, возможно, ошибка разработчика.
Некоторые из классов фреймворка являются абстрактными, даже если они содержат конкретные методы, такие как класс ActionForm рамок struts ..... – Shivam
В частности, касается использования абстрактных или скрывающих конструктор: ключевое слово abstract
более четко заявляет архитектурное предназначение программиста. Это лучше.
Тот факт, что они предоставили стандартные реализации всех методов, является отдельным вопросом.
- 1. Почему мы создаем календарный класс (abstract) в Java
- 2. Почему мы создаем переменную типа класса?
- 3. Интерфейс, абстрактный класс и методы абстрактного класса
- 4. Почему абстрактный класс должен реализовывать абстрактный метод абстрактного базового класса?
- 5. Почему требуется абстрактный класс?
- 6. Почему мы создаем экземпляры классов?
- 7. Почему мы создаем объекты-указатели?
- 8. Почему абстрактный класс имеет конструктор?
- 9. Почему мы создаем экземпляры классов для циклов?
- 10. Должен ли абстрактный класс иметь хотя бы один абстрактный метод?
- 11. абстрактный класс расширяет абстрактный класс в php?
- 12. абстрактный класс i не нужно переопределять все методы?
- 13. Почему мы создаем экземпляр объекта из интерфейса вместо класса?
- 14. Абстрактный класс, класс, интерфейс
- 15. Абстрактный класс: выход из этого кода
- 16. Почему мой дочерний класс не наследует все методы родительского класса?
- 17. «Невозможно создать абстрактный класс», хотя класс не должен быть абстрактным
- 18. Методы класса класса пространства имен не определены
- 19. Почему мы создаем объект с использованием отражения
- 20. Почему в интерфейсе есть абстрактный класс и абстрактные переменные/методы?
- 21. Абстрактный базовый класс, реализующий методы интерфейса производного класса
- 22. почему мы реализуем интерфейс для абстрактного класса
- 23. почему мы должны добавить(), когда мы создаем пустой массив
- 24. Linq, когда мы создаем объект
- 25. Почему HTTPServlet - абстрактный класс? Любая функциональная причина?
- 26. Почему мы не создаем объект базового класса в производной функции класса, если защищен конструктор базового класса.
- 27. Вложенный абстрактный класс и возвращающий абстрактный класс
- 28. Что это значит, когда мы создаем много экземпляров статического класса?
- 29. Класс, который расширяет абстрактный класс
- 30. Абстрактный класс и конструктор
Если вы реализуете все методы, вам не нужно создавать абстрактные классы. – TheLostMind
Можете ли вы привести нам пример того, где это делается? – Keppil
возможно, если это класс, содержащий только статические методы, какую-то логику, помощник, служебный класс. – wxyz