"is a" and "has a" distinguish inheritance from delegation. For example, let's say you want a Vector that only allows objects of type Animal to be added to it. You have a choice of extendig java.util.Vector and overriding the methods to make that restriction. That's "is a". On the other hand, you could make a class that contained a Vector as a member variable. Your methods could mimic the interface of Vector, and delegate the work to the Vector member. That's "has a". Each approach has pros and cons. The GOF Patterns book is a good reference for this issue.
Here is the code that someone showed me to explain it.
All vehicles have a motor so the vehicle has a member variable of type motor. A Car is a specialized type of vehicle because it inherits from vehicle. Since the Motor in Vehicle is protected Car can access this. A Car also has a Trunk and a Tire.