Do you have to handle extensions? It can be hard to tell (123)456-7890 from 123-4567 ext 890 in an unformatted string.
Good question. I hadn't considered the possiblity of extensions yet (the code for writing the PhoneNumber class is not in my domain on this project; it's just an example that a co-worker and I discussed this morning, so it's what I used here.) My initial thought is that that would be another member on the object, possibly blank, and stored as only numbers inside a String, similar to how I've proposed storing the phone number itself.

And where are you storing the country information? You really have to associate it with each phone number some how, because if your going to the trouble of handeling international phone numbers you should also handle companies and people that have phone numbers in multiple countries.
You are absolutely correct in this. The country would need to be stored with the phone number itself so that we know 1) which class to produce out of the factory, and 2) how to format it (which inherently falls out of 1) above.)

You should probably do some research on international standards, I know there is a standard for phone numbers that goes something like +country code-area code-sub code-remaining digits.
I'll go look into that; didn't really know that there was a "standard" as such. Thanks.