Noting that this version with public method `message()` compiles and `greet()` works as expected,

```
class Foo {
    public greet() {
        console.log(`Hello, ${this.getMessage()}`);
    }
    getMessage() : string {
        return "I am Foo"
    }
}

class Goo extends Foo {
    getMessage() : string {
        return "I am Goo";
    }
}

```

but with `getMessage()` marked private, class Goo no longer compiles:

```
class Foo {
    public greet() {
        console.log(`Hello, ${this.getMessage()}`);
    }
    private getMessage() : string {
        return "I am Foo"
    }
}

class Goo extends Foo {
    private getMessage() : string {
        return "I am Goo";
    }
}

```

I often use private methods to break up larger methods by abstracting out chunks of low level code to improve readability as many books on the subject recommend, and I make them private because they are not intended to be called by consumers of the class, but for some reason typescript is working against me when one of these lower level methods needs to be modified for certain subclasses of my base class.

Practically speaking is there some other way to do this, aside from having to implement the public method in the extended class as well, or exposing the "dirty laundry" of the support method by including it the public interface of the base and child classes?

Also I'm wondering just as a matter of interest what is the motivation of the typescript authors for this seemingly arbitrary rule that public methods can be overriden but private methods can't?