Why Use Interfaces Instead of Abstract Classes With DI?
===

I am beginning my journey of learning about dependency injection, and one of the reasons that I saw why it is a good idea to use DI was that it explicitly specifies your dependencies, which also makes your code more clear.

I have also noticed that interfaces are used abundantly, but I want to know why would we not use abstract classes for the sole purpose of specifying a default constructor?

Of course no implementation could be included in the abstract class.

Wouldn't this:

    abstract class FooBase
    {
        protected IBar _bar;

        FooBase(IBar bar)
        {
            _bar = bar;
        }

        abstract void DoSomething();
        abstract void DoSomethingElse();
    }

Demonstrate more clearly what the dependency of a FooBase object is more than:

    interface IFoo
    {
        IBar Bar { get; }

        void DoSomething();
        void DoSomethingElse();
    }

?

Please keep in mind I am new to this whole concept so be nice :)