An interface is a programming structure that allows the computer to enforce certain properties on an object. In object oriented programming, an interface generally defines the set of methods that an instance of a class that has that interface could respond to. It is actually a concept of abstraction and encapsulation.
Enumerations, or Enums allow a developer to define a custom type that is limited to one of a discrete number of possible values. That can be especially helpful when defining a domain model, as it enables making invalid states unrepresentable. In other words, enums are a restricting layer on top of classes and class constants, intended to provide a way to define a closed set of possible values for a type.