Every object has a class type, and most of the time you wouldn't want to change it; Incidents stay as Incidents, Notes stay as Notes, and so on.
Configuration Items are a little different, because they can be re-purposed or altered in such a way as to make them something different: A Server could be virtualized, or a Photocopier could be upgraded to enable faxing and scanning. Under these circumstances you may want to change the CI Class type.
You can add the Class Type attribute to the CI window, and you can even select a different value, but it wont save the change, so why is this?
In short, it is not possible to change the class type of an object once it has been created, as it would make a serious mess of your data integrity.
There are attributes that exist on one class type that may not exist on another; a Server and Workstation may both have Operating System attributes, but only the Server would have a RAID Controller, for example. Further to that, there is no way the system would know which attributes to map from one class type to another.
Consider that even when changing a user type from, say, End User to Analyst, the system is doing a lot of work in the background. If you could directly change the class type of an object, you would be able to save your Configuration Item as any class type you wanted, including many that wouldn't make sense, such as a User or a Task Note.
Taking the example of changing a physical server to a virtual server, when this occurs it becomes a different CI. The box the server used to live on is still a Configuration Item in its own right.
Under these circumstances the CI would have to be recreated, which means it will have a blank version history.
An alternative approach would be to keep all servers, both physical and virtual as the same class type, but the record of whether they are physical or not could be kept as a version controlled attribute (a reference list, for example).