title: Can a trait give default implementation for *some* methods of a parent trait?
body: <p>Suppose we have a basic trait and an advanced trait as follows:</p>
  <pre class="lang-rust prettyprint-override"><code>pub trait BasicTrait {
      fn key_method(&amp;self);
  
  
      fn other_method(&amp;self);
  }
  
  pub trait AdvancedTrait: BasicTrait {
      fn key_method_with_argument(&amp;self, parameter: u32);
  }
  </code></pre>
  <p>Now, every time someone will implement <code>AdvancedTrait</code>, the most likely implementation of <code>BasicTrait::key_method(&amp;self)</code> is calling <code>key_method_with_argument</code> with some default argument. How can I provide this default implementation (idiomatically) so that anyone implementing <code>AdvancedTrait</code> will (1) only need to implement <code>key_method_with_argument</code> and any other required methods from <code>BasicTrait</code>, and (2) <em>optionally</em> implement <code>key_method()</code> and override the default implementation, only if needed?</p>
  <p>Related questions:</p>
  <p>having an <code>impl</code> block as proposed in the answer <a href="https://stackoverflow.com/questions/52418809/can-a-trait-give-a-default-implementation-for-the-method-of-a-trait-that-it-inhe">here</a> does not work since the code is expected to implement all other methods of <code>BasicTrait</code>.</p>