Это касается контрактов типа.
Во-первых, вы можете создать абстрактный класс без абстрактных методов. Это говорит о том, что этот класс не может быть создан "как есть", вы должны расширить его, а затем создать экземпляр класса TH (если класс TH также не является абстрактным).
Затем вы можете сделать метод абстрактным. Это говорит о том, что «я не собираюсь давать какую-либо реализацию для этого метода, я хочу заставить любого, кто расширяет этот класс, предоставить реализацию для этого метода».
Теперь, поскольку абстрактные методы не имеют реализации в классе, который их объявляет, когда вы создаете абстрактный метод, компилятор заставляет вас также сделать его класс абстрактным, потому что вам не имеет смысла создавать экземпляр этого класса напрямую, когда он имеет по крайней мере один метод без реализации (абстрактный метод).