Как сделать метод абстрактным java

Обновлено: 06.07.2024

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

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

Что такое абстракция. Когда мы говорим слово “программа”, мы подразумеваем некую сущность, которая решает определённые задачи. Мы опускаем тот факт, что программа состоит из объектов, методов, классов и т.д.

В этом случае мы можем сказать, что программа – это абстракция.

Ранее мы уже обсуждали инкапсуляцию на примере полей класса. Теперь рассмотрим ситуацию, когда мы “прячем” от пользователя саму реализацию определённого функционала. То есть, мы акцентируем внимание на том, какую работу выполняет класс, а не на том, как именно он её выполняет.

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

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

Абстрактным называют класс, который не может иметь экземпляров. Также, он может содержать абстрактные методы (методы без реализации). Для того чтобы сделать класс абстрактным, необходимо применить ключевое слово abstract. Вот некоторые данные об абстрактных классах:

  • Абстрактный класс не может иметь ни одного экземпляра.
  • Если мы наследуем абстрактный класс, то мы должны имплементировать все его абстрактные методы (методы без реализации).
  • Абстрактный класс может содержать обычные и/или абстрактные методы.
  • Если класс содержит хотя бы один абстрактный метод, то он должен быть объявлен, как абстрактный.

Для понимания того, как это работает на практике, рассмотрим пример простого приложения.

Пример:
Абстрактный класс Profession

В результате работы программы мы получим следующий результат:

Существует ряд правил реализации интерфейсов:

  • Класс может имплементировать более любое количество интерфейсов.
  • Интерфейс может наследовать другой интерфейс (по аналогии с классами).

Для того чтобы наследовать интерфейс, нам необходимо использовать ключевое слово extends.

Рассмотрим следующий пример.

Пример:
У нас есть интерфейс Job, который имеет один метод doJob(). Другой интерфейс – ProductManagement наследует этот интерфейс и добавляет свой собственный getPowerOverDevelopers().

Класс ProductManager, который имплементирует интерфейс ProductManagement, должен реализовывать все методы этих классов.

В результате работы программы мы получим следующий результат:

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

В1: УПС: Абстракция? Q2: интерфейс? Вопрос 3. абстрактный класс? Q4: Почему статические методы не могут быть абстрактными… С тегом java, ооп.

В1: УПС: Абстракция? Q2: интерфейс? Вопрос 3. абстрактный класс? Q4: Почему статические методы не могут быть абстрактными в Java? Q5: Преимущества абстракции? Вопрос 6: Почему мы не можем создать объект абстрактного класса? Q7: Инкапсуляция данных против абстракции данных? Вопрос 8: Абстрактный класс против интерфейса? Q9: Когда использовать абстрактный класс? Q10: когда использовать интерфейс?

1.1 процесс реализации скрытия

отображение основных функций и скрытие несущественных функций от пользователя.

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

способы достижения абстракция:-

  1. использование интерфейса
  2. использование абстрактного класса

2. Использование Интерфейса:-

2.1 Рассмотрим пример пульта дистанционного управления. Он работает только как интерфейс между телевизором и пользователем. Его нельзя использовать для управления каким-либо другим устройством/машиной. т.е. он содержит все необходимые функции, которые могут потребоваться пользователю, скрывая при этом детали реализации от пользователя. 2.2 аналогичный интерфейс содержит пустые методы и также может содержать переменные.

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

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

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

-: здесь мы создали интерфейс с методами и переменной, которые мы реализуем в классе, а также пытаемся выяснить, повлияет ли изменение значения внутри метода на переменную интерфейса, т.е. на переменную off.

изменение значения переменной внутри метода не влияет на значение интерфейса

-:в приведенном выше примере, если мы раскомментируем строку;” а затем выполним код , это приведет к ошибке во время компиляции

пример статического метода внутри интерфейса:

-:приведенный выше код не будет компилироваться, так как он вызывает getHeight(), который должен находиться внутри Kangaroo.

для выполнения кода необходимо внести одно изменение т.е.

пример вложенного интерфейса:

пример вложенного интерфейса:

пример интерфейса, расширяющего интерфейс:

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

класс интерфейса также создается после компиляции кода компилятором, т. е. printable.class файл будет создан после компиляция завершена

Факты об интерфейсе:-

-:все члены т.е. как методы, так и переменные/поля интерфейса являются общедоступными -: все методы являются общедоступными , аннотация по по умолчанию

кроме статических и по умолчанию

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

-:предоставить полная абстракция -: помогает достичь множественного наследования, поскольку java не поддерживает множественное наследование.

один класс может реализовывать несколько интерфейсов, которые также можно назвать реализацией нескольких интерфейсов.

-:помогает добиться слабой связи при реализации шаблонов проектирования

слабая связь означает независимое поведение, например, класс A знает о классе B только то, что класс B раскрыл через свой интерфейс.

3. использование абстрактного класса:-

3.1 обеспечить полную абстракцию, где все методы пусты, а переменные поля являются общедоступными статическими и окончательными по умолчанию 3.2 использовать ключевое слово аннотация до объявления класса и объявления метода 3.3 мы не можем создать объект абстрактного класса

-:но мы можем определить его конструктор, который может быть вызван только в конструкторе его подкласса -:конструктор подкласса может получить доступ к конструктору суперкласса для инициализации его переменной, которая может потребоваться в подклассе

3.4 они могут содержать как абстрактные, так и неабстрактные методы.

они не могут содержать тело абстрактного метода

3.5 если подкласс не реализует абстрактные методы, то мы должны сделать его абстрактным явно

если класс содержит абстрактный метод, то он должен быть определен как абстрактный

3.6 абстрактный класс используется для предоставления наиболее общей функции, характерной для различных классов.

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

3.7 Здесь Животное это абстрактный класс, который разделяет общее свойство животного с Собакой и Lion класс, которые реализуют Как() из Животное абстрактный класс

Класс Animal содержит как абстрактные, так и неабстрактные методы.

4. Почему статические методы не могут быть абстрактными в Java:-

4.1 необходимо помнить о двух моментах

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

4.2 здесь, как вы можете видеть, оба пункта противоречат друг другу, в результате чего невозможно сделать абстрактный метод статичным

хотя абстрактный класс может содержать статические методы

6. Почему мы не можем создать объект абстрактного класса:-

6.1 это не очень полезно делать, потому что не было бы никакой фактической реализации вызываемого метода.

7. Инкапсуляция данных против абстракции данных:-

Инкапсуляция данных – это сокрытие данных или информации

Абстракция скрывает детали реализации

Инкапсуляция связывает элементы данных и методы вместе

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

Инкапсуляция скрывает данные

абстракция обеспечивает доступ к определенной части данных

8. Абстрактный класс против интерфейса:-

используется ключевое слово “абстрактный”

используется ключевое слово “интерфейс”

Мы можем расширить абстрактный класс, используя ключевое слово extends

Мы можем реализовать интерфейс, используя ключевое слово implements

могут иметь как конечные, так и не конечные, статические и нестатические переменные

могут иметь только конечные и статические переменные, объявленные по умолчанию

скорость высокая по сравнению с интерфейсом

скорость медленная по сравнению с абстрактным классом

могут иметь или не иметь переменные, объявленные как окончательные

переменные по умолчанию объявлены как окончательные

может иметь все модификаторы доступа

разрешен только модификатор общего доступа

может иметь как абстрактные, так и неабстрактные или конкретные методы

могут быть только абстрактные методы, но, начиная с версии 8 Java, интерфейс также поддерживает статические и нестатические методы.

могут иметь конструкторы

не может быть конструкторов

Абстрактные классы не поддерживают множественное наследование, но класс может расширять только один абстрактный класс, но может реализовывать несколько интерфейсов Java

Интерфейс поддерживает Множественное наследование

абстрактный класс используется, чтобы избежать независимости

интерфейс используется, когда требуется дальнейшее улучшение

9. Когда использовать абстрактный класс:-

9.1 когда некоторые связанные классы, которым необходимо использовать одни и те же строки кода 9.2, требуется использовать модификаторы доступа, отличные от общедоступных

10. Когда использовать интерфейс:-

10.1 для достижения 100 % абстракции 10.2 для достижения множественного наследования 10.3 для определения поведения определенного типа данных, независимо от того, кто реализует его поведение

Пожалуйста, прокомментируйте, если у вас есть какие-либо отзывы или предложения

Аналогично в объектно-ориентированном программировании абстракция — это процесс сокрытия деталей реализации от пользователя, только пользователю будут предоставлены только функциональные возможности. Другими словами, у пользователя будет информация о том, что делает объект, а не о том, как он это делает.

В Java абстракция достигается с помощью абстрактных классов и интерфейсов.

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

Класс, который содержит абстрактное ключевое слово в своем объявлении, называется абстрактным классом.

Абстрактные классы могут содержать или не содержать абстрактные методы , т. Е. Методы без тела (public void get ();)

Но если у класса есть хотя бы один абстрактный метод, тогда класс должен быть объявлен как абстрактный.

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

Чтобы использовать абстрактный класс, вы должны унаследовать его от другого класса, предоставить реализации для абстрактных методов в нем.

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

Абстрактные классы могут содержать или не содержать абстрактные методы , т. Е. Методы без тела (public void get ();)

Но если у класса есть хотя бы один абстрактный метод, тогда класс должен быть объявлен как абстрактный.

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

Чтобы использовать абстрактный класс, вы должны унаследовать его от другого класса, предоставить реализации для абстрактных методов в нем.

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

пример

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

Вы можете заметить, что кроме абстрактных методов класс Employee такой же, как и обычный класс в Java. Класс теперь абстрактный, но он все еще имеет три поля, семь методов и один конструктор.

Читайте также: