user33435: Right now I have an object:
class Dog
{
  public:
    Dog(uint8_t I2c, Stream& feedback);
    void Speak();
  private:
    uint8_t _I2c;
    Stream& _output;
};

Dog::Dog(uint8_t I2c, Stream& feedback):_output(feedback),_I2c(I2c){}

Dog::Speak(){
_output.println("Hi There.");
}

That is currently constructed in my sketch via:
Dog Dug([I2cPort], Serial);
How can I modify my class so that to be compatible with taking either a Serial object or an LCD display (using Adafruit's RGB LCD library )? 
Eg: 
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
Dog Dug([I2cPort], Serial);
Dog Sam([I2cPort], lcd);

Additional info:
The LCD in question is mostly used as a UI display in its own library this library refreshes the display every 1.5 sec. As information from speak(); and the UI have similar priority, it is acceptable if one instantly overwrites the other.
I am open to solutions that involve modifying the construction of Dog the only requirement is that I need to be able to indicate print("[something]"); in the Dog.cpp
I'm interested in asking this question on the Arduino SE as I believe there are differences in how you would approach this if the problem was on a traditional computer.

user337: If your class is only writing to the stream you probably want to have your class take a Print object instead of a Stream object.
The Adafruit library inherits from Print.

33435: <p>Right now I have an object:</p>

<pre><code>class Dog
{
  public:
    Dog(uint8_t I2c, Stream&amp; feedback);
    void Speak();
  private:
    uint8_t _I2c;
    Stream&amp; _output;
};

Dog::Dog(uint8_t I2c, Stream&amp; feedback):_output(feedback),_I2c(I2c){}

Dog::Speak(){
_output.println("Hi There.");
}
</code></pre>

<p>That is currently constructed in my sketch via:</p>

<p><code>Dog Dug([I2cPort], Serial);</code></p>

<p>How can I modify my class so that to be compatible with taking either a Serial object or an LCD display (using <a href="https://github.com/adafruit/Adafruit-RGB-LCD-Shield-Library" rel="nofollow noreferrer">Adafruit's RGB LCD library</a> )? </p>

<p>Eg: </p>

<pre><code>Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
Dog Dug([I2cPort], Serial);
Dog Sam([I2cPort], lcd);
</code></pre>

<p>Additional info:</p>

<p>The LCD in question is mostly used as a UI display in its own library this library refreshes the display every 1.5 sec. As information from <code>speak();</code> and the UI have similar priority, it is acceptable if one instantly overwrites the other.</p>

<p>I am open to solutions that involve modifying the construction of <code>Dog</code> the only requirement is that I need to be able to indicate <code>print("[something]");</code> in the Dog.cpp</p>

<p>I'm interested in asking this question on the Arduino SE as I believe there are differences in how you would approach this if the problem was on a traditional computer.</p>
 337: <p>If your class is only writing to the stream you probably want to have your class take a Print object instead of a Stream object.</p>

<p>The Adafruit library inherits from Print.</p>
