Найти тему
DEBAGanov

Java. Где и для чего используется модификатор abstract?

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

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

Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.

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

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

Например:

abstract class Shape {
public abstract void draw();
}

class Rectangle extends Shape {
public void draw() {
System.out.println("Drawing Rectangle");
}
}

class Circle extends Shape {
public void draw() {
System.out.println("Drawing Circle");
}
}

public class Test {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
}
}

В этом примере Shape - это абстрактный класс, который определяет метод draw(), но не предоставляет его реализацию. Rectangle и Circle - это подклассы абстрактного класса Shape, которые реализуют метод draw().

В методе main() мы создаем объект Circle типа Shape, и вызываем его метод draw(). Компилятор автоматически находит реализацию метода draw() в классе Circle и вызывает эту реализацию, что приводит к выводу строки "Drawing Circle".

Github: https://github.com/DEBAGanov