Интерфейс и абстрактный класс

RedDeveloper
01.01.2023 15:50
Интерфейс и абстрактный класс

Интерфейс:

  • Ключевое слово interface используется для создания интерфейсов.
  • Интерфейсы - это поведенческие контракты. Они предоставляют дополнительное поведение нашему объекту. Например, клонируемость
  • Интерфейс может иметь методы и переменные, но методы, объявленные в интерфейсе, по умолчанию являются общедоступными абстрактными.
  • Начиная с Java 8, мы можем иметь в интерфейсе методы по умолчанию и статические методы с телом.
  • Начиная с Java 9, мы можем иметь приватные методы в интерфейсе.
  • Интерфейсы формируют контракт между классом и внешним миром, и этот контракт навязывается компилятором во время сборки.
  • Интерфейс, не имеющий метода, известен как маркерный или маркированный интерфейс, например, Serializable, Cloneable, Remote и т.д. Они используются для предоставления некоторой важной информации JVM, чтобы JVM могла получить некоторые полезные данные. Они используются для предоставления некоторой важной информации JVM, чтобы JVM могла выполнять некоторые полезные операции.
  • Интерфейс, имеющий только один метод, известен как функциональный интерфейс

Абстрактный класс:

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

Пример:

Vehicle - это абстрактный класс & Autopilot - это интерфейс. Автопилот - это функция для типа Vehicle, она не является обязательной для всех реализаций транспортных средств.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.