title: Diamond inheritance
body: <blockquote>
    <p>Assume classes D and E and F all inherit from base class B, and that
    class C inherits from D and E.</p>
    
    <p>(i) How many copies of class B appear in class C?</p>
    
    <p>(ii) How would using virtual inheritance change this scenario? Explain
    your answer.</p>
    
    <p>(iii) How does Java avoid the need for multiple inheritance for many
    of the
        situations where multiple inheritance might be used in C++?</p>
  </blockquote>
  
  <p>Here are some of my current ideas, but I'm an by no means an expert on C++!</p>
  
  <p><code>(i)</code> If C inherits from D and E which are subclasses of B, then would D and E technically be copies of their super class? Then if C inherits from D and E that would mean there are 2 copies of B in C. </p>
  
  <p><code>(ii)</code> Using virtual is somewhat similar to using Abstract in Java (i think). Now given this, it would mean that there would not be multiple copies of B in C, as the instantiation would be cascaded down to the level it is needed. I am not sure how to word my explanation but say B has a function called print() which prints "i am B" and C overrides this function put prints "i am C". If you called print() on C without virtual you end up printing "i am B", using virtual would mean that it would print "i am C".</p>
  
  <p><code>(iii)</code> My idea here is that Java can use interfaces to avoid the use of multiple inheritance. You can implement multiple interfaces but you can only extend one Class. I'm not sure what else to add here, so any input or relevant resources would be helpful.</p>