<p>I'm going to try to ask my question in the context of a simple example...</p>

<p>Let's say I have an abstract base class Car.  Car has-a basic Engine object.  I have a method StartEngine() in the abstract Car class that delegates the starting of the engine to the Engine object.</p>

<p>How do I allow subclasses of Car (like Ferrari) to declare the Engine object as a specific type of engine (e.g., TurboEngine)?  Do I need another Car class (TurboCar)?</p>

<p>I'm inheriting a plain old Engine object and I cannot re-declare (or override) it as a TurboEngine in my Car subclasses. </p>

<p><strong>EDIT:</strong>  I understand that I can plug any subclass of Engine into myEngine reference within my Ferrari class...but how can I call methods that only the TurboEngine exposes?  Because myEngine is inherited as a base Engine, none of the turbo stuff is included. </p>

<p>Thanks!</p>

There are lots of ways it could be done.
I would favour having a
```
setEngine()
```
method on
```
Car
```
, then having the
```
Ferrari
```
constructor call
```
setEngine()
```
and pass in an instance of a
```
TurboEngine
```
.