Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора теория(полная).doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
123.9 Кб
Скачать

Полиморфное поведение производных классов.

Полиморфизм— это способность, которая позволяет одному интерфейсу получать доступ к целому классу действий.

Более глубокое использование полиморфизма обеспечивает использование виртуальных методов. Модификатором virtual отмечаются методы, которые могут быть переопределены в его производных классах. Таким образом, правильнее говорить о системе

виртуальных функций, начало которой находится в корневом классе некоторой иерархии типов.

Любой класс, расположенный вниз по иерархии от базового, в котором имеется метод с модификатором virtual (в

режиме public или protected), может поступить с этим методом двояко: Ничего не делать и тем самым унаследовать базовую реализацию; Переопределить метод, используя модификатор override . При этом

сигнатура новой версии виртуального метода должна точно соответствовать базовой; Перекрыть метод, используя модификатор new.

using System; namespace Элемент

{class Место {int X,Y;

public Место(int x,int y){X=x; Y=y;}

virtual public string type()

{return String.Format

("Координаты: X={0},Y={1}", X, Y); } }

class Линия : Место

{int Length;

public Линия(int x, int y, int length): base(x, y) { Length = length; }

public override string type()

{return base.type()+"Длина:" +Length;} }

class Окружность : Место

{int Radius;

public Окружность(int x, int y, int radius) : base(x, y) { Radius = radius;}

public override string type()

{return base.type()+"Радиус:"+Radius;} }

class Program

{static void Main()

{Место[] mass = {new Место(1,1), newЛиния(2,2,2),new Окружность(3,3,3),};

foreach (Место i in mass) Console.WriteLine(i.type()); } } }

Координаты: X=1, Y=1

Координаты: X=2, Y=2 Длина:2

Координаты: X=3, Y=3 Радиус: 3

тип производного класса всегда и неявно может быть преобразован к типу базового класса, в том числе - и к типу любого непрямого базового класса! В данном примере это преобразование выполняется каждый раз при сохранения адреса конкретного объекта в массиве mass ссылок на класс Место.

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

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

namespace test

{ abstract class Figure

{ public abstract double perimeter(); }

class Rectangle : Figure

{ double a, b;

public Rectangle(double a, double b)

{ this.a = a; this.b = b; }

public override double perimeter()

{ return (a + b) * 2; } }

class Test

{ public static void Main()

{ Rectangle f2 = new Rectangle(2,6); System.Console.WriteLine("Периметр прямоугольника = {0}",f2.perimeter()); } } }

На экране: 16

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]