Абстрактные классы Java: что это такое и зачем нужны?
Абстрактные классы в Java - это классы, которые имеют хотя бы один метод, объявленный с ключевым словом "abstract". Такие классы нельзя создавать непосредственно, т.к. они не полностью реализованы и предназначены для использования в качестве базового класса для других классов.
Абстрактный класс может содержать как абстрактные, так и неабстрактные методы. Абстрактный метод не имеет реализации в самом абстрактном классе, в котором он объявлен, а только прототип, т.е. сигнатуру и тип возвращаемого значения. Таким образом, реализация абстрактного метода должна быть предоставлена в подклассе.
Пример:
// Абстрактный класс
abstract class Shape {
// Неабстрактный метод
public void show() {
System.out.println("Это фигура");
}
// Абстрактный метод
abstract public double area();
}
// Конкретный класс-наследник
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double area() {
return length * width;
}
}
// Конкретный класс-наследник
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double area() {
return Math.PI * radius * radius;
}
}
В данном примере класс Shape является абстрактным классом, т.к. он содержит абстрактный метод area(). Классы-наследники Rectangle и Circle предоставляют реализацию абстрактного метода area() и могут быть использованы для создания объектов. Но сам абстрактный класс Shape не может быть использован для создания объектов, он нужен лишь в качестве базового класса, обобщающего понятие фигуры.
Также стоит отметить, что абстрактные классы могут иметь конструкторы и поля, как и любые другие классы.
В общем, абстрактные классы в Java предоставляют средство для определения общих свойств и методов группы классов, т.е. позволяют реализовывать полиморфизм и наследование.