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