An interface defines a contract (what methods exist) and supports multiple inheritance of type. An abstract class can share state and implementation, but you can extend only one class. Use interface for capability, abstract class for shared base behavior.