Зачем использовать абстрактный class без абстрактных методов?

Сейчас я изучаю java, и я нахожусь в части Abstract. Я прочитал для меня странную часть, что есть абстрактный class, который не включает какой-либо метод abstarct.

Почему они используют этот class?

Чтобы предотвратить создание экземпляра этого classа и использовать его только в качестве базового classа. В classах детей могут использоваться общие методы, определенные в абстрактном classе.

Например, нет смысла создавать экземпляр AbstractVehicle . Но все транспортные средства могут повторно использовать общий метод registerMileage(int) .

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

HttpServlet является примером этого шаблона в действии. Он имеет стандартные реализации для всех методов, которые обрабатывают разные типы запросов, но все они генерируют исключение. Подclass должен переопределить их, если они хотят сделать что-то значимое. Это нормально оставить некоторые методы обработчика не переопределенными, пока они никогда не вызываются.

Да, мы можем иметь абстрактный class без абстрактного метода. Лучший пример абстрактного classа без абстрактного метода – HttpServlet

Если этот class расширяет еще один абстрактный class и не имеет реализации унаследованных абстрактных методов.

Этот class содержит некоторую общую логику для всех своих наследников, но сам по себе не представляет собой полезную сущность (с точки зрения конкретного приложения)

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

Эти типы classов используются для реализации общей логики, которая может быть реализована другими classами. Создание абстрактного объекта предотвращает его создание. Но другие classы могут наследовать class и его методы.

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

Другим примером такого classа является использование мастеров создания. Эти classы используются, чтобы облегчить клиенту создание объектов, которые связаны в теме, но развязаны в зависимости от необходимости. По своей природе методы этих classов создателей статичны, и их можно рассматривать как classы полезности. Очевидно, что установка этих classов бесполезна и, следовательно, abstract ключевое слово.

Чтобы упомянуть недавний пример, я встретил class org.springframework.integration.dsl.sftp из org.springframework.integration.dsl.sftp который в основном является простым способом требовать от объектов sftp api объекты (например: адаптеры, шлюзы).

Я не могу придумать никаких оснований для его использования. Его можно использовать как «маркер», но интерфейс будет лучшим выбором.

Абстрактный class без абстрактного метода означает, что вы можете создать объект этого абстрактного classа. См. Мой пример.

 abstract class Example{ void display(){ System.out.println("Hi I am Abstract Class."); } } class ExampleDemo { public static void main(String[] args) { Example ob = new Example(){}; ob.display(); } } 

Если вы напишете один абстрактный метод внутри абстрактного classа, то он не будет компилироваться. Это означает, что если вы создадите абстрактный class без абстрактного метода, вы можете создать Object этого абстрактного classа.

  • Внутренний class может получить доступ, но не обновлять значения - AsyncTask
  • Как работает импорт Java?
  • Java Runtime.exec ()
  • Как использовать перехватчик для добавления заголовков в «Дооснащение 2.0»
  • Использование акселерометра, гироскопа и компаса для расчета движения устройства в 3D-мире
  • Можно ли подменять enums для добавления новых элементов?
  • Как случайным образом выбрать элемент из массива
  • Обнаружение изменений состояния, внесенных в BluetoothAdapter?
  • Загрузка Android из URL в Bitmap
  • java.lang.ClassNotFoundException: org.postgresql.Driver, Android
  • Могу ли я выполнять арифметические операции над базовым classом Number?
  • Interesting Posts

    Могу ли я уменьшить свой браузер до сетевой активности «голых костей»?

    сортировка списка карт

    Ubuntu не загружается (застрял на всплеске)

    Как преобразовать файл Excel с несколькими листами в набор файлов CSV?

    Переключение жесткого диска на новый ПК приводит к синему экрану с Windows Server 2008

    Как создать соединение на Win8?

    Сделать Google Chrome «Приложение» Windows использует высококачественные значки в Windows 7

    Лучший способ разобрать поплавок?

    Без имени / анонимных пространств имен или статических функций

    Можно ли настроить цвета Windows 8.1 аналогично тому, как это было с Win95 в «Advanced Appearance Settings»?

    Добавление элементов уровня решения в пакете NuGet

    Как элементы массива C ++ обрабатываются в функциях управления копированием?

    Что означает -> означает в C ++?

    Как добавить гиперссылку в JLabel

    Установить кеш-контроль для всего ведра S3 автоматически (используя политики ведра?)

    Давайте будем гением компьютера.