Интерфейсы наследование классов

Нужно создать иерархию: класс C реализует интерфейс B и наследует класс D, B расширяет интерфейс A, класс D реализует A. Создать 4 функции, принимающие в качестве аргумента A, B, C, D.

Создать объекты типа C, D. Реализовать вызовы всех допустимых комбинаций созданных функций и объектов-аргументов.