Урок 9

Абстрактные методы и классы


Абстрактные методы – это методы у которых отсутствует реализация.

Общая форма:

аbstract тип имяМетода(списокПараметоров); 

Пример:

public abstract double area();

Абстрактные методы должны быть переопределены в подклассе.

Любой класс, содержащий один или больше абстрактных методов, должен быть также объявлен как абстрактный. Для этого достаточно указать ключевое слово abstract перед ключевым словом class в начале объявления класса:

public abstract class Figure2 {
    … 
    public abstract double area();
}

У абстрактного класса не может быть никаких объектов. Но абстрактные классы можно применять для создания ссылок на объекты.

Пример 1. Абстрактный класс

public abstract class Figure2 {

    ...
    public abstract double area();
    public static void main(String[] args) {
         // У абстрактного класса не может быть никаких объектов.
         // Figure2 figure1 = new Figure2();
         // Но абстрактные классы можно применять для создания ссылок на объекты.
	 Figure2 figure2 = new Rectangle();
    }
}

Также нельзя объявлять абстрактные конструкторы или абстрактные статические методы.

Пример 2.  Использование абстрактного класса

public abstract class Figure2 {
    double dim1;
    double dim2;

    public Figure2(double dim1, double dim2) {
        this.dim1 = dim1;
        this.dim2 = dim2;
    }

    public abstract double area();
}

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

public class Rectangle2 extends Figure2 {
    public Rectangle2(double dim1, double dim2) {
        super(dim1, dim2);
    }

    public double area() {
        System.out.println("B области четырехугольника.");
        return dim1 * dim2;
    }
}
public class Triangle2 extends Figure2 {
    public Triangle2(double dim1, double dim2) {
        super(dim1, dim2);
    }

    public double area() {
        System.out.println("B области треугольника.");
        return dim1 * dim2 / 2;
    }
}
public class FindAreas2 {
    public static void main(String[] args) {
        Figure2[] figures = new Figure2[3];
        figures[0] = new Rectangle2(20, 10);
        //  figures[0] = new Figure2(10, 10);
        figures[1] = new Rectangle2(10, 10);
        figures[2] = new Triangle2(10, 10);
        for (Figure2 figure : figures) {
            figure.area();
        }
    }
}


0 comments
Leave your comment: