Интерфейс против абстрактного класса (общий OO)
недавно у меня было два телефонных интервью, где меня спросили о различиях между интерфейсом и абстрактным классом. Я объяснил им все, что мог придумать, но, похоже, они ждут, чтобы я упомянул что-то конкретное, и я не знаю, что это такое.
из моего опыта, я думаю, справедливо следующее. Если я упускаю важный момент, пожалуйста, дайте мне знать.
интерфейс:
каждый способ объявленный в интерфейсе должен быть реализован в подклассе.
В интерфейсе могут существовать только события, делегаты, свойства (C#) и методы. Класс может реализовать несколько интерфейсов.
Абстрактный Класс:
только абстрактные методы должны быть реализованы в подклассе. Абстрактный класс может иметь обычные методы с реализациями. Абстрактный класс может также иметь переменные класса рядом с событиями, делегатами, свойствами и методами. Класс может только реализовать один абстрактный класс только из-за отсутствия множественного наследования в C#.
после всего этого интервьюер задал вопрос: "что, если бы у вас был абстрактный класс с только абстрактными методами? Чем это будет отличаться от интерфейса?"Я не знал ответа, но я думаю, что это наследство, как упоминалось выше, верно?
другой интервьюер спросил меня, что если бы у вас была публичная переменная внутри интерфейса, как будет ли это отличаться от абстрактного класса? Я настаивал, что вы не можете иметь публичную переменную внутри интерфейса. Я не знала, что он хотел услышать, но он тоже не был удовлетворен.
См. Также:
Comments