ActionResult() is an abstract base class that defines the general result type for MVC actions. ViewResult() is a concrete subclass of ActionResult() that renders a specified view to the response stream. Some key subtypes of ActionResult() include ViewResult(), PartialViewResult(), EmptyResult(), RedirectResult(), and JsonResult(). ActionResult() allows for polymorphism and dynamic behavior by returning different result types from an action. It should be used as the return type when an action may have different behaviors, while ViewResult() can be used when an action will definitely return a view.