You can have:
- Table and Public Synonym with the same name
- Public Synonym and Private Synonym with the same name
But can not have:
- Table and Private Synonym with the same name inside the same schema
The first thing to note is that Public Synonyms are non-schema objects, while Private Synonyms and Tables are. Another is that the uniqueness of database objects' names are defined by the namespace. As it is stated in SQL Expert Study Guide:
- USER, ROLE, and PUBLIC SYNONYM objects are in their own collective namespace.
- TABLE, VIEW, SEQUENCE, PRIVATE SYNONYM, and user-defined TYPE objects have their own unique namespace within a given schema.
- INDEX objects have their own namespace within a given schema.
- CONSTRAINT objects have their own namespace within a given schema.
So, as long as objects do not share the same namespace you can give them the same names. Hope this helps.