De primera puedes usar un tipo void y castearlo como lo necesites, pero sin perder el tipo que se asigno inicialmente.
Lo otro es , en teoria,la implementacion de una clase con multiples definiciones, de acuerdo al tipo de parametro que le pases, el problema es el constructor...
Suerte.