Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр-2(Классы).docx
Скачиваний:
3
Добавлен:
16.08.2019
Размер:
142.88 Кб
Скачать

Полиморфизм интерфейсов

Ранее уже говорилось о том, что для группирования вместе связанных методов и свойств могут применяться интерфейсы. Создавать экземпляры интерфейсов таким же образом, как и экземпляры объектов, нельзя, но зато можно создавать переменную типа интерфейса и затем использовать ее для получения доступа к методам и свойствам, предоставляемым этим интерфейсом в объектах, которые его поддерживают.

Например, предположим, что вместо базового класса Animal метод EatFood() помещается в интерфейс по имени IConsume. Этот интерфейс могут поддерживать оба класса — Cow и Chicken, — но только в таком случае каждый из них должен обязательно иметь свою реализацию метода EatFood() (поскольку интерфейсы не содержат реализаций). После этого к этому методу станет можно получать доступ с помощью примерно такого кода:

Cow myCow = new Cow();

Chicken myChicken = new Chicken();

IConsume consumelnterface;

consumeInterface = myCow;

consumeInterface.EatFood();

consumeInterface = myChicken;

consumeInterface.EatFood();

Такой подход предоставляет простой способ для вызова множества объектов одинаковым образом и избавляет от зависимости от общего базового класса. В этом коде вызов consumeInterfасe. EatFood () будет приводить к вызову метода EatFood () либо класса Cow, либо класса Chicken, в зависимости от того, какой экземпляр будет присвоен переменной типа интерфейса.

Здесь важно обратить внимание на то, что производные классы наследуют интерфейсы, поддерживаемые их базовыми классами. В предыдущем примере интерфейс IConsume может поддерживаться как классом Animal, так и обоими классами Cow и Chicken. Запомните, что классы с общим базовым классом вовсе необязательно имеют общие интерфейсы и наоборот.

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