Type systems based on R. Milner's concept of parametric polymorphism are recognized by the following facts: every well typed program has a uniquely defined denotational semantics, which ensures that the evaluation of a program will never produce a runtime type error. Additionally, every well typed program has a principal type such that every other type is an instance of the principal type. The principal type is a type expression over unsorted variables and can be computed by a type inference algorithm based on Robinson's unification algorithm. In traditional programming languages, overloaded operators and constants are treated as pure syntactic sugar: an overloaded operator can have a finite number of unrelated types and the type analysis component must determine for each occurrence of an overloaded operator, which of its overloaded instances was intended by the programmer. This process is usually called overloading resolution. Adding overloaded operators based on this concept to a parametrically polymorphic language has two drawbacks: since each programmer declared identifier is reqired to have a simple type, the type inference algorithm becomes NP-complete and overloaded operators cannot be abstracted over in user defined functions. In this thesis we define the concept of parametric overloading, which avoids these problems and keeps all nice properties of parametric polymorphism: principality of types, absence of runtime errors for well typed programs, polynomially time bounded type inference algorithm and full abstraction over overloaded operators. Building on these results, we investigate a type system for a language which additionally supports implicit coercions. We define a generic inference system based on the concept of constrained types, show that principal types exist for this system and typability remains decidable for a special class of constraints. Finally we show that parametric overloading can be combined with regular types.