Абстрактные классы и методы Java

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

 открытый абстрактный класс BaseController { //абстрактный классабстрактный void process(); //абстрактный метод}

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

В Java абстрактный класс не может быть создан из-за его частичной реализации, но его можно расширить так же, как и обычный класс.

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

public abstract class BaseController {abstract void process();}public class AccountController extends BaseController {void process() {//method implementation}//...}

2. Абстрактный метод

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

public abstract class BaseController { //abstract classabstract void process(); //abstract methodvoid displayHelp() { //non-abstract method//method body}}

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

public interface IReport {Object[][] generate(Object[][] inputArr); //abstract is implicitly inferred by compiler}

Обратите внимание, что абстрактный метод НЕ может быть final, native, synchronized, static или private. Это совершенно очевидно, поскольку эти ключевые слова управляют поведением метода, а абстрактные методы не имеют никакого поведения или тела.

В следующем примере код не скомпилируется, поскольку ключевое слово final не позволяет методу наследоваться в дочернем классе, а ключевое слово abstract требует того же. Это конфликт. Поэтому компилятор выдает ошибку.

public abstract class BaseController {final abstract void process(); //Compiler Error}

3. Пример ключевого слова Java Abstract

Давайте рассмотрим пример ключевого слова abstract. В данном примере у нас есть абстрактный класс Animal, который имеет один абстрактный метод makeNoise().

Этот класс наследуется двумя дочерними классами Dog и Cat. Оба класса реализуют метод makeNoise() в соответствии со своей природой.

Абстрактные классы и методы Java0
public abstract class Animal {public abstract void makeNoise();}
public class Cat extends Animal {@Overridepublic void makeNoise() {System.out.println("meow");}}
public class Dog extends Animal {@Overridepublic void makeNoise() {System.out.println("bark";);}}

Давайте протестируем вышеприведенные классы.

public class Main {public static void main(String[] args) {Animal a1 = new Cat();a1.makeNoise();Animal a2 = new Dog();a2.makeNoise();}}

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

meowbark

4. Заключение

  • Ключевое слово abstract не является модификатором доступа.
  • Ключевое слово abstract можно использовать с методами и классами.
  • Мы не можем создавать экземпляры абстрактных классов.
  • Любой подкласс абстрактного класса должен либо реализовывать все абстрактные методы родительского класса, либо сам быть объявлен абстрактным.
  • Любой класс, содержащий один или несколько абстрактных методов, также должен быть объявлен абстрактным.
  • Ключевое слово abstract нельзя использовать с окончательными, собственными, синхронизированными, статическими или частными ключевыми словами.
Прокрутить вверх