Just as a small addition to my previous article on abstract classes vs interfaces.

Wneh we declare an interface, we can’t tell how to create an object, implementing that interface. E. g., we can not define even a default constructor.

Thus, when we need to have at least one constructor of a defined signature, we must use abstract classes.

Check it out:

public interface IVector {
    public void Vector(); // something like a default constructror
}

public class Vector2d implements IVector {
    // THIS IS NOT A CONSTRUCTOR!
    @Override
    public void Vector() {
    }
}

and compare it to this:

public abstract class BaseVector {
    public abstract BaseVector() {
    }
}

public class Vector2d extends BaseVector {
    public Vector2d() {
        // now it DOES HAVE a default constructor
        super();
    }
}