@age directly accesses the instance variable
self.age tells the object to send itself the message
age, which will usually return the instance variable
@age — but could do any number of other things depending on how the
age method is implemented in a given subclass. For example, you might have a MiddleAgedSocialite class that always reports its age 10 years younger than it actually is. Or more practically, a PersistentPerson class might lazily read that data from a persistent store, cache all its persistent data in a hash.