Для знакомства с интерфейсами смотрите первую часть обзора.
Наследование/Изменение
Если говорить о наследовании к интерфейсу, то к нему можно наследовать только интерфейсы. К классам (обычным, абстрактным) можно наследовать множество интерфейсов.
Класс Audi наследуется от класса Car и интерфейса ITrasport для того, чтобы поменять реализацию метода GetName.
Создаем две реализации интерфейса ITransport и выполняем методы.
В результате получаем во втором случае на вызове метода GetName, ответ: Audi car, так как этот метод был переопределен.
Также зависит чем в итоге у вас является ваша реализация.
В данном случае результатом car1.GetName будет "Audi car", а в car2.GetName будет "Usual car". Так происходит из-за того, что после создания объекта, он преобразуется в объект интерфейса в первом случае и в объект Car во втором. Для интерфейса переопределен метод GetName, для класса Car - нет.
По интерфейсам у меня всё. Более подробно понять для чего они и где используются можно будет в статьях про паттерны и их реализацию.
Телеграмм канал: https://t.me/dotnetreview