title: Why can't abstract protected methods be called from child classes?
body: <p>Here is a simplified version of what I wanted in a project :</p>
  
  <pre class="lang-js prettyprint-override"><code>abstract class Parent {
      protected abstract method(): any;
  }
  
  class Child extends Parent {
      protected method(): any {}
  
      protected other() {
          let a: Parent = new Child()
          a.method()
      }
  }
  
  class Other extends Parent {
      protected method(): any {}
  }
  </code></pre>
  
  <p>This fails when trying to call <code>a.method()</code>. The error reads as following :</p>
  
  <pre><code>Property 'method' is protected and only accessible through an instance of class 'Child'.
  </code></pre>
  
  <p><a href="https://www.typescriptlang.org/play/?ssl=16&amp;ssc=2&amp;pln=1&amp;pc=1#code/IYIwzgLgTsDGEAJYBthjAgCsKBTAdogN4BQC5CADlAPYS7y4AmCokM8CAtrhABY0mACgCUALlb4AngG4SAXxIkUaDAGE+AS2QtcAD3r4mGbHkIJSFKrXqMWPfoNETg0i4rIVqdBvRZ0+XChRC08rcmReVglTAkQAXgR8XAB3BA1tYREw8OAAOgcBLJzFDxV0BAB5fiCEfUNjLBw40KtvWz9uXiLnSSl3BSUgA" rel="nofollow noreferrer">Playground Link</a></p>
  
  <p>From what I understand, the problem comes from the fact that <code>a.method()</code> isn't called from within the actual instance <code>a</code>. But still, it's called from within a <code>Child</code> instance, so the error seems weird. Aren't instances of the same base class "friends" with each other ?</p>
  
  <p>And finally, how can I solve my issue without losing the benefits that come with <code>protected</code> ? Thanks.</p>