Type Checking

Type checking can uncover program errors that simple parsing cannot catch. Without type checking these errors would show up at runtime. Traditional type checking provided safety, but sometimes at the cost of flexibility.

Like modern functional programming languages, object-oriented programming languages derive their power from their sophisticated typing systems that provide both flexibility and safety.

For a theoretical overview of typing systems read:

Type Systems

Most of these type systems derive their power from supporting one or more forms of polymorphism.

We can consider reflection as an internalization of the type system.