Pero por ejemplo en cada método que yo implemente de la interfaz deberia hacer una comprobación de si es de tipo "Contacto Empresarial" o "Contacto Personal" y en caso contrario lanzar una excepcion como IlegalArgumentException? , ¿ Es normal que en estos casos se llene de casteos y de lanzamiento de excepciones para especificar que no se aceptan argumentos de la clase base si no de solo una clase especifica? o se hace la clase sin tomar en cuenta esas cosas pensando en que el programa jamas le va pasar como argumento un objeto de la herencia que no era para ese tipo de directorio.