Центр дистанционного обучения
Абстрактные классы
public class Shape ...
public class Circle extends Shape ...
public class Rectangle extends Shape ...
Shape s1 = new Circle(0, 0, 2);
Shape s2 = new Rectangle(10, 10, 3, 1);
Shape s3 = new Shape(1, 1); // Что это за фигура?
Создание объектов класса Shape не имеет смысла, он нужен только как предок других классов
online.mirea.ru
Центр дистанционного обучения
Абстрактные классы
public abstract class Shape {
private double x; private double y;
//Для абстрактных классов конструктор обычно
//имеет доступ protected, так как вызывается только
//из наследников:
protected Shape(double x, double y) { this.x = x;
this.y = y;
}
}
online.mirea.ru
Центр дистанционного обучения
Абстрактные классы
Экземпляр абстрактного класса невозможно создать:
Shape s0 = new Shape(0, 0); // Ошибка
Абстрактные классы используются для выражения того, что класс используется только в качестве базового класса для наследования, а не сам по себе
online.mirea.ru
Центр дистанционного обучения
Абстрактные классы
Абстрактные (и только абстрактные) классы могут иметь абстрактные методы:
public abstract class Shape {
private double x; private double y;
protected Shape(double x, double y) { this.x = x;
this.y = y;
}
// Площадь 0 не имеет смысла для конкретной фигуры: public abstract double getArea();
}
online.mirea.ru
Центр дистанционного обучения
Абстрактные классы
Метод, являющийся абстрактным, должен быть определен в классе-потомке (так как у него нет реализации, которая могла бы быть унаследована от базового класса)
public class Circle extends Shape {
// Ошибка: метод getArea() не определен
}
online.mirea.ru