Wildcards with extends allow flexibility when getting values out of a container by accepting subtypes, while wildcards with super allow flexibility when putting values into a container by accepting supertypes. The Get and Put Principle recommends using extends when only getting values, super when only putting values, and no wildcard when both getting and putting. Key limitations are that extends only allows null to be added and super only allows the Object type to be retrieved.