Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по ООП.doc
Скачиваний:
31
Добавлен:
25.09.2019
Размер:
1.04 Mб
Скачать
  1. Интерфейс пользователя и абстрактный класс.

Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы один абстрактный метод, называется абстрактным (а таком классе могу быть и обычные методы). Нельзя создавать экземпляры абстрактного класса – такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности – или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или он реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом и единственная возможность его использования – это производить от него классы-потомки). Вот пример, иллюстрирующий использование абстрактных классов:

using System;

namespace test

{

abstract class Figure

{

//Площадь фигуры

public abstract double square();

public abstract double perimeter();

}

class Triangle: Figure

{

double a, b, c; //Стороны

//Конструктор

public Triangle(double a, double b, double c)

{

this.a=a;

this.b=b;

this.c=c;

}

public override double square()

{

//Используем формулу Герона

double p = (a+b+c)/2;

return Math.Sqrt(p*(p-a)*(p-b)*(p-c));

}

public override double perimeter()

{

return a+b+c;

}

}

class Rectangle: Figure

{

double a, b; //Стороны

//Конструктор

public Rectangle(double a, double b)

{

this.a=a;

this.b=b;

}

public override double square()

{

return a*b;

}

public override double perimeter()

{

return (a+b)*2;

}

}

class Test

{

public static void Main()

{

Figure f1, f2;

f1=new Triangle(3, 4, 5);

f2=new Rectangle(2, 6);

System.Console.WriteLine(f1.perimeter()+", "+ f1.square());

System.Console.WriteLine(f2.perimeter()+", "+ f2.square());

}

}

}

Тут мы объявляем абстрактный класс Figure, от которого производим два класса – Rectangle (класс прямоугольника) и Triangle (треугольника). В классе Figure есть два абстрактных метода – square (для подсчета площади) и perimeter (для периметра). Так как для призвольной фигуры формул для площади и для периметра не существует, то эти методы объявлены в классе Figure и переопределены в производных классах (с ключевым словом override). Далее в классе Test мы проводим испытание – заводим две переменные типа ссылка на базовый класс Figure, ниже в эти ссылки мы записываем созданные экземпляры производных классов Triangle и Rectangle. Обратите внимание, что ссылку на абстрактный класс мы создать можем, а экземпляр – нет. Далее мы выводим на экран периметр и площадь для наших фигур.