Well, your abstract class declares an
override
member NumLegs - which has no base class implementation to override. What you need is to declare it as
virtual
which allows derived classes to override it:
public virtual int NumLegs() { return 4; }
If they do, then the "new" version will be called, if they don't, then the base class version will be used, and 4 will be returned.
The same problem exists with CanFly: interface methods cannot be overridden as they don;t have a base class implementation to override. In this case, just remove the keyword:
public bool CanFly() { return true; }
and your errors will disappear.