 <p>Why wont you override a method like this:</p> <pre><code>class ListIteratingSystem { execute() { this.executeOnStart(); }; private executeOnStart() { throw new Error('This method is abstract'); }; }; class MySystem extends ListIteratingSystem { constructor (/*...*/) { super(); } private executeOnStart() { alert("derived"); }; } </code></pre> <p>execution of <code>new MySystem().execute();</code> displays alert.</p> <p>Unfortunately there is no nice way to make <code>executeOnStart</code> method <code>protected abstract</code> yet. This is a little bit counterintuitive but remember that visibility accessors are only for compilator and intelisence.</p>