В 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() в соответствии со своей природой.

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 нельзя использовать с окончательными, собственными, синхронизированными, статическими или частными ключевыми словами.