В чем основное различие между абстрактным классом и интерфейсом? - PullRequest
2 голосов
/ 27 августа 2010

В контексте последних тенденций в интервью я заметил, что этот вопрос возникает каждый раз.Но когда кто-то отвечает на общее определение, тогда интервьюер говорит, что все это знают ... скажи что-то другое.Дальнейшие сценарии спрашивают, где какой из них будет использоваться и почему он будет полезен и почему

Так что любезно поделитесь любой новой информацией по этой теме.

Заранее спасибо ...

Ответы [ 3 ]

4 голосов
/ 27 августа 2010

Абстрактные классы могут предоставлять реализации для своих методов, тогда как Интерфейс строго предоставляет контракт (какие методы должен реализовывать объект).

Абстрактные классы полезны в ситуациях, когда вы хотите предоставить базовую реализацию наследникам, но вы не хотите, чтобы экземпляр вашего класса создавался напрямую. Например, подумайте об автомобиле. Вы не хотели бы создавать универсальный автомобиль, но каждая забота может иметь некоторый базовый набор функций:

public abstract class Car
{
    public InternalCombustionEngine Engine { get; private set; }

    public virtual void Start()
    {
        Engine.Start();
    }

    public abstract void Drive();
}

Интерфейсы полезны, когда у вас есть некоторые классы, которые могут не иметь прямого отношения друг к другу, но вы хотите обрабатывать их одинаково, потому что у каждого из них одинаковый набор функций.

4 голосов
/ 27 августа 2010

Абстрактный класс может определять базовые реализации методов вместе с защищенными или частными членами данных, в то время как интерфейс определяет только те функции, которые класс должен предоставлять вместе с открытыми членами данных.

Как мне нравитсясмотреть на это, что абстрактный класс является основой для других классов.Он не только определяет операции, которые должна иметь конкретное семейство вещей, но также и данные, которые эти операции должны выполнять для своей работы.Определенные дочерние элементы могут добавлять (или даже игнорировать, если необходимо) определенные элементы данных.Интерфейс, с другой стороны, является контрактом - он ничего не говорит о том, как вы собираетесь что-то делать, только о том, что вы должны сделать, и что вы сделаете видимым для внешнего мира.Ваша внутренняя работа - это ваше личное дело в интерфейсе.

1 голос
/ 27 августа 2010

В дополнение к тому, что сказали другие, я рассматриваю интерфейс как отношения поведения, которые являются общими для классов, но не являются отношениями is-a. Это способ выражения общего поведения в отличие от наследования отношений is-a. Я считаю, что именно поэтому некоторые вызовы взаимодействуют с множественным наследованием бедного человека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...