Ключевое слово abstract
Ключевое слово abstract применяется к классам и методам.
Абстрактный класс не может быть создан с помощью оператора new,
он служит базой для других классов. Абстрактный метод не содержит тела
(реализации) и обязательно должен быть переопределен в неабстрактном
классе-наследнике. Если класс содержит хотя бы один абстрактный метод,
он сам должен быть объявлен как abstract.
Синтаксис
// Абстрактный класс
abstract class ClassName
{
// Абстрактный метод (без тела)
abstract void methodName();
}
Пример
Давайте создадим абстрактный класс Shape с абстрактным методом
area и реализуем его в классе Rectangle:
abstract class Shape
{
abstract double area();
}
class Rectangle extends Shape
{
double width;
double height;
Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
@Override
double area()
{
return width * height;
}
}
public class Main
{
public static void main(String[] args)
{
Rectangle rect = new Rectangle(3, 4);
System.out.println(rect.area());
}
}
Результат выполнения кода:
12.0
Пример
Абстрактный класс может содержать как абстрактные, так и обычные методы с реализацией. Давайте рассмотрим пример:
abstract class Animal
{
abstract void makeSound();
void sleep()
{
System.out.println("Sleeping...");
}
}
class Dog extends Animal
{
@Override
void makeSound()
{
System.out.println("Woof");
}
}
public class Main
{
public static void main(String[] args)
{
Dog dog = new Dog();
dog.makeSound();
dog.sleep();
}
}
Результат выполнения кода:
"Woof"
"Sleeping..."
Пример
Попытка создать объект абстрактного класса напрямую приведет к ошибке компиляции:
abstract class Shape
{
abstract double area();
}
public class Main
{
public static void main(String[] args)
{
// Shape shape = new Shape(); // Ошибка компиляции
System.out.println("Cannot instantiate abstract class");
}
}
Результат выполнения кода:
"Cannot instantiate abstract class"
Смотрите также
-
ключевое слово
extends,
которое используется для наследования классов -
ключевое слово
implements,
которое используется для реализации интерфейсов -
ключевое слово
interface,
которое определяет контракт для классов -
ключевое слово
inheritance,
которое описывает механизм наследования в Java