Класс, содержащий модификатор абстрактного, является абстрактным классом, и абстрактный класс не может создавать объекты экземпляра. Классы, содержащие абстрактные методы, должны быть определены как абстрактные классы, а методы в классах абстрактных классов не обязательно должны быть абстрактными. Абстрактные методы, определенные в абстрактном классе, должны быть реализованы в конкретном подклассе, поэтому не может быть абстрактных конструкторов или абстрактных статических методов. Если подкласс не реализует все абстрактные методы абстрактного родительского класса, то подкласс также должен быть определен как абстрактный тип.
Можно сказать, что интерфейс является частным случаем абстрактного класса, и все методы в интерфейсе должны быть абстрактными. Определения методов в интерфейсе по умолчанию относятся к общедоступному абстрактному типу, а типы переменных-членов в интерфейсе по умолчанию имеют общедоступный статический окончательный тип.
Давайте сравним грамматические различия между ними :
1. Абстрактные классы могут иметь конструкторы, но интерфейсы не могут иметь конструкторов.
2. В абстрактных классах могут быть обычные переменные-члены, но в интерфейсах обычных переменных-членов нет.
3. Абстрактные классы могут содержать неабстрактные обычные методы. Все методы в интерфейсе должны быть абстрактными, неабстрактных обычных методов быть не может.
4. Типы доступа к абстрактным методам в абстрактных классах могут быть публичными, защищенными и (тип по умолчанию, хотя
В eclipse не сообщается об ошибках, но это не должно работать), но абстрактный метод в интерфейсе может иметь только общедоступный тип, а по умолчанию используется общедоступный абстрактный тип.
5. Абстрактные классы могут содержать статические методы, но интерфейсы не могут содержать статические методы.
6. И абстрактные классы, и интерфейсы могут содержать статические переменные-члены. Тип доступа к статическим переменным-членам в абстрактных классах может быть произвольным, но переменные, определенные в интерфейсах, могут иметь только общедоступный статический конечный тип, а по умолчанию используется общедоступный статический конечный тип.
7. Класс может реализовывать несколько интерфейсов, но может наследовать только один абстрактный класс.
Давайте поговорим о различиях между ними в применении :
Интерфейсы играют большую роль в методах проектирования системной архитектуры и в основном используются для определения контрактов связи между модулями. Абстрактные классы играют роль в реализации кода и могут реализовать повторное использование кода. Например, шаблон проектирования метода шаблона является типичным применением абстрактных классов. Предполагается, что все классы сервлетов в проекте должны использовать один и тот же метод для определения разрешений и записи. Зарегистрируйте и обрабатывайте исключения, затем вы можете определить абстрактный базовый класс, чтобы все сервлеты наследовали этот абстрактный базовый класс. В методе обслуживания абстрактного базового класса завершаются определение разрешений, запись журнала доступа и код обработки исключений. только заполните соответствующие коды бизнес-логики. Псевдокод выглядит следующим образом: