This is one of the very rare cases in Magento where a class is not used with the factory methods like `Mage::getModel()`.

Actually `Mage_Catalog_Model_Product_Type` only contains **static** methods, which makes it play in the same league as the `Mage` class itself and totally different from all other model classes.

**Ergo, you cannot rewrite it.**

What makes it really evil is that it might *seem* to work because in some places Magento instantiates the class with `Mage::getSingleton('catalog/product_type')` but in other cases it calls the methods statically. 

###For example:

- In `Mage_Catalog_Model_Resource_Prodcut_Flat_Indexer` the static call is used:

        foreach (array_keys(Mage_Catalog_Model_Product_Type::getTypes()) as $typeId) {

- In `Mage_Adminhtml_Block_Catalog_Product_Grid` the singleton is used:

        $this->addColumn('type',
            array(
                'header'=> Mage::helper('catalog')->__('Type'),
                'width' => '60px',
                'index' => 'type_id',
                'type'  => 'options',
                'options' => Mage::getSingleton('catalog/product_type')->getOptionArray(),
        ));

*(in case you are wondering, calling static methods on an instance is totally allowed in PHP)*