Абстрактные классы и методы
Абстрактные методы – это методы у которых отсутствует реализация.
Общая форма:
abstract тип имяМетода(списокПараметоров);
Пример:
public abstract double calculateArea();
Абстрактные методы должны быть обязательно переопределены в подклассе.
Любой класс, содержащий один или больше абстрактных методов, должен быть также объявлен как абстрактный. Для этого достаточно указать ключевое слово abstract перед ключевым словом class
в начале объявления класса:
public abstract class Figure2 {
…
public abstract double calculateArea();
}
У абстрактного класса в Java не может быть никаких объектов. Но абстрактные классы можно применять для создания ссылок на объекты. Например:
public abstract class Figure2 {
...
public abstract double calculateArea();
public static void main(String[] args) {
// У абстрактного класса не может быть никаких объектов.
// Figure2 figure1 = new Figure2();
// Но абстрактные классы можно применять для создания ссылок на объекты.
Figure2 figure2 = new Rectangle();
}
}
Также НЕЛЬЗЯ объявлять абстрактные конструкторы или абстрактные статические методы.
Рассмотрим пример использования абстрактных классов и методов на примере класса Figure
и его наследников Triangle
и Rectangle
, которые мы рассматривали в Переопределение методов. Класс Figure
описывает абстрактную фигуру, для которой вычисление площади не имеет смысла, поэтому метод calculateArea()
более правильно сделать абстрактным.
public abstract class Figure2 {
double dimension1;
double dimension2;
public Figure2(double dimension1, double dimension2) {
this.dimension1 = dimension1;
this.dimension2 = dimension2;
}
public abstract double calculateArea();
}
Любой подкласс, производный от абстрактного класса, должен реализовать все абстрактные методы из своего супер класса или же сам быть объявлен абстрактным:
public class Rectangle2 extends Figure2 {
public Rectangle2(double dimension1, double dimension2) {
super(dimension1, dimension2);
}
public double calculateArea() {
System.out.println("B области четырехугольника.");
return dimension1 * dimension2;
}
}
public class Triangle2 extends Figure2 {
public Triangle2(double dimension1, double dimension2) {
super(dimension1, dimension2);
}
public double calculateArea() {
System.out.println("B области треугольника.");
return dimension1 * dimension2 / 2;
}
}
У абстрактного класса не может быть объектов, но можно создать массив абстрактного класса, который будет содержать ссылки на объекты классов наследников:
public class FindAreasExample {
public static void main(String[] args) {
Figure[] figures = new Figure[3];
figures[0] = new Figure(10, 10);
figures[1] = new Rectangle(10, 10);
figures[2] = new Triangle(10, 10);
for (Figure figure : figures) {
double area = figure.caclulateArea();
System.out.println(area);
}
}
}
Результат выполнения программы:
B области четырехугольника.
200.0
B области четырехугольника.
100.0
B области треугольника.
50.0
Курс 'Java для начинающих' на Udemy
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.