With this functionality, would we do better to create a common function named "initializeElement(string myname" and have all subclasses define it as:
initializeElement(String myName) {
    super.initializeElement(myName);
    // do my stuff here
}

That way we aren't calling generateId() and setting the name in multiple different places.
Another alternative would just be to call super on each of the constructors. And have the unnamed constructor call the named version. (you can do that in java can't you?)